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

Java 在A=new A()之后是否真的创建了实例?,java,static,Java,Static,我假设对象a是在执行带有注释2的行之后创建的。但什么也没印出来。仅在启用带有注释1的行后,才会打印“A:1中的值”。然后我很困惑,什么时候真正创建了对象?相反,static A A=新的A(1)将打印“A:1中的值”,即使注释1被禁用 有人能解释这背后的机制吗?谢谢。A是封闭类的字段 (非静态)字段在实例化该类的对象时初始化。因此,只有当新Tmp()发生时,a字段才会被“填充” 这就是一切 A是封闭类的字段 (非静态)字段在实例化该类的对象时初始化。因此,只有当新Tmp()发生时,a字段才会被“

我假设对象
a
是在执行带有注释2的行之后创建的。但什么也没印出来。仅在启用带有注释1的行后,才会打印“A:1中的值”。然后我很困惑,什么时候真正创建了对象?相反,
static A A=新的A(1)将打印“A:1中的值”,即使注释1被禁用


有人能解释这背后的机制吗?谢谢。

A
是封闭类的字段

(非静态)字段在实例化该类的对象时初始化。因此,只有当新Tmp()发生时,
a
字段才会被“填充”


这就是一切

A
是封闭类的字段

(非静态)字段在实例化该类的对象时初始化。因此,只有当新Tmp()发生时,
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);
    }
}