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);
}
}
我假设在执行 comment 2 的行之后创建了对象a
。但没有打印出来。只有在使用注释1 启用该行后,才会打印“A:1中的值”。然后我很困惑,当对象真的被创建?相反,static A a = new A(1);
将打印“A:1中的值”,即使注释1 的行已禁用。
任何人都可以解释这背后的机制吗?感谢。
答案 0 :(得分:5)
A a
是封闭类的字段。
(非静态)字段将被初始化。因此,只有在a
发生时,您的new Tmp()
字段才会“填充”。
这就是全部。