如下这个代码new出了10个k为什么没有说重复定义啊 ,要是Kit k = new Kit(); Kit k = new Kit();这样连写两个就会说重复定义的,哪位大侠和我讲讲下面的程序在内存中是怎么工作的怎么分配内存的。public class KitCircle1 {
public static void main(String[] args){
for(int i=0; i<10 ;i++) {
Kit k = new Kit();
}
}
}class Kit {
int id;
}
public static void main(String[] args){
for(int i=0; i<10 ;i++) {
Kit k = new Kit();
}
}
}class Kit {
int id;
}
解决方案 »
- 很纠结的问题
- 请问在Jpcap当中为何会找不到OpenDevice()这个方法
- 大家进来看看啊!到底是哪不对啊??
- 软考部分答案
- class中定义public static final String
- OEM什么意思
- 怎样在JTree里头加JCheckBox????在线等待。有例子的加100分
- RandomAccessFile的writeUTF写的是什么
- 急急我的IE5为何不能运行java2的applet呀,java2的插件我也装了,但一打开java2 的applet ie5就关闭!!急
- 关于捕获异常并返回执行问题
- 按下键盘上的箭头怎么对应程序里的箭头?
- 使用JPanel的paintComponent方法出现了问题
Kit k = new Kit();在循环中就是创建了10个对象,在内存中开辟了10个地址。只不过,在每次循环的过程中,都是一个k对象都指向了一个新的地址。 而你创建两个 Kit k = new Kit(); Kit k = new Kit();。根本就是两码事。这首先不符合java规范的,这就重名了,没有什么可研究的。
还是说吧··每次new出来的都是新东西··只是k都是旧东西··它只不过是一个引用··我们没创建一个新的对系那个出来·其实只是改变了k的引用而已··也就是k指向的对象··
一次循环结束,走到花括号的}时,k就生命结束了
下次进入循环,从新进入花括号,重新生成一个k
LZ可以试试这样的代码
for(int i=0; i<10 ;i++) {
{Kit k = new Kit();} //放到一个花括号里
Kit k = new Kit(); //这样是不会有问题的,但是把上下两句换个位置就有问题了,没有花括号的那句换到上面的话,因为它的的生命周期在for的花括号里,这样就造成带花括号的那句重复定义了
}
public static void main(String[] args) {
for(int i=0; i<10 ;i++) {
int x = 1;
}
//int i = 1;
//int i = 1;//这两个连续定义就要报错,因为在同一作用域
}你的问题应该是
“for循环中定义的变量作用域到什么范围”,跟对象内存什么的无关
k的生命周期就是在当前循环内。 所以不会出现重复定义。