在A a = new A()之后是否真的创建了一个实例?

时间:2017-11-11 11:45:16

标签: java static

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 的行已禁用。

任何人都可以解释这背后的机制吗?感谢。

1 个答案:

答案 0 :(得分:5)

A a是封闭类的字段。

实例化该类的对象时,

(非静态)字段将被初始化。因此,只有在a发生时,您的new Tmp()字段才会“填充”

这就是全部。