class A
{
private int a;
public A(int a)
{
this.a = a;
}
}
public class Text
{
public static void main(String args[])
{
for(int i=1; i<=10; i++)
{
A aa = new A(i);
}
}
}
上面的代码能编译能运行,new出了10个名叫aa的对象,java中应该不能有同名的对象的吧,为什么这样可以呢?这个程序执行完毕之后是存在10个名叫aa,但成员变量i值不通的对象,还是每次循环都会释放掉上一个循环中创建的对象,重新创建,最终只剩下i = 10的这个对象呢?
小弟新手 求诸位大牛解答呀!
------解决方案--------------------
括号里面的代码是一个周期,你运行完了,它也就没有存在的意义了,会被垃圾回收器收掉。
------解决方案--------------------
------解决方案--------------------
public static void main(String args[]) {
for (int i = 1; i <= 10; i++) {
A aa = new A(i);
}
for (int j = 1; j <= 10; j++) {
String a[] = new String[j];
}
}
------解决方案--------------------
String a[] = new String[j];
这和楼主的做法一样的吧?
我的理解是 new出来的 就是一个对象 不可能会重复。
但是 你用了for循环 for结束以后 才是真正的对象
中间的过程中产生的对象都是假的。
根据这个for在实际中的结果 才能确定最终会创建出什么对象。
初学java 理解不对的地方 还请大家多多指教。orz
------解决方案--------------------
aa是局部变量,只是保存了A对象的一个实例的引用而已!
当aa离开作用域就不存在了,假设垃圾回收器没有运行的话,之前new出来的对象是在堆内存中的
只是程序中没有对它的直接或者间接引用,就是对A的实例没有可见性!
------解决方案--------------------
a是局部变量,a的生命周期是循环里面
------解决方案--------------------
想了解这方面的知识,楼主还是看看think in java 吧,关于你的问题。你可以看看我下面的一段代码:
- Java code
package Char06;class A { private int a; public A(int a) { this.a = a; } public int getA(){ return this.a; } public void finalize() throws Throwable{ System.out.println("对象被释放"+this.getA()); }};public class Text { public static void main(String args[]) { A aa = null; for (int i = 1; i <= 10; i++) { aa = new A(i); } System.gc(); }}
------解决方案--------------------
楼主,你该了解下什么叫引用,什么叫对象 ,还有对象的生命周期
你现在一点概念都没有
------解决方案--------------------
aa是局部变量,只是保存了A对象的一个实例的引用而已!
当aa离开作用域就不存在了,假设垃圾回收器没有运行的话,之前new出来的对象是在堆内存中的
只是程序中没有对它的直接或者间接引用,就是对A的实例没有可见性!
------解决方案--------------------
LZ要知道的变量的作用域
------解决方案--------------------
------解决方案--------------------
变量,不是对象,变量并没有同名,只是对象建立了多个,回收了对象。
------解决方案--------------------
个人感觉是这样的:
一 首先要理解 A aa = new A(1);的含义,这句话包含的三个步骤
1. 首先 new A(i) ,代表 在堆中产生一个A的对象(没有名字)
2. A aa 是在栈中 产生一个引用
3. 将aa 指向 堆中的 1步骤中产生的对象。
这个理解完了,就可以进行下一步理解了,
二 就是局部变量aa的生命周期的问题,每次执行for循环的代码段,是在栈中完成 ,每一次的aa的生命周期都仅仅局限于 一次for循环,也就是aa 的作用于仅仅是在for循环体里面 。
也就是说你的for循环不断生成了10个aa,不过他们的命都很短。
三 for循环 其实也产生了10个 A类的对象