【发布时间】:2014-06-09 03:10:51
【问题描述】:
class FDemo {
int x;
FDemo(int i) {
x = i;
}
protected void finalize() {
System.out.println("Finalizing " + x);
}
void generator(int i) {
FDemo o = new FDemo(i);
System.out.println("Creat obj No: " + x); // this line
}
}
class Finalize {
public static void main(String args[]) {
int count;
FDemo ob = new FDemo(0);
for(count=1; count < 100000; count++)
ob.generator(count);
}
}
}
在我评论的那一行,x的值总是显示0(对象ob中x的值),为什么不显示对象o的值??我知道如果我使用 o.x,我将获得对象 o 中 x 的值。但是仍然在这段代码中为什么它显示了abject ob而不是object o的值??
【问题讨论】:
-
Erm,你实例化一个新的
FDemo然后丢弃它而不做任何事情。您到底希望发生什么? -
你还没有告诉它在
o中查找x。如果你写System.out.println("Create obj No: " + o.x);,你会得到你所期望的,但x本身是指当前对象中的x,而不是你刚刚创建的对象中的x。 -
如果您将 'int x' 更改为 'static int x' 它应该可以工作,但您的方法是错误的。如果您要从创建新实例的对象创建 setter 方法中更改值。
-
@franki3xe 这将为他提供他正在寻找的输出,但它会更改他所有 FDemo 对象的 x 值。因为他在构造函数中设置了这个,我假设他希望每个对象都不同。