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

在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()发生时才会填充“填充”

这就是这一切。