在A a = new A()之后真的创建了一个实例吗?
问题描述:
public class Tmp {
public static void main(String[] s) {
//new Tmp(); //comment 1
}
A a = new A(1); //comment 2
}
class A {
A(int i) {
System.out.println("value in A: " + i);
}
}
我假定对象a
被创建后注释2被执行。但没有印刷。只有在启用注释1后才能打印“A:1中的值”。那么我很困惑,当这个对象真的被创建了吗?相反,static A a = new A(1);
将打印“A:1的值”,即使注释1已禁用。在A a = new A()之后真的创建了一个实例吗?
任何人都可以解释这背后的机制吗?谢谢。
答
A a
是封闭类的字段。
(非静态)字段在您实例化该类的对象时得到初始化。因此,您的a
字段仅在new Tmp()
发生时才会填充“填充”。
这就是这一切。