uml*_*uml 0 java initialization class object
这是Java代码的片段.
class A{
public A() { }
public A(int i) { System.out.println(i ); }
}
class B{
static A s1 = new A(1);
A a = new A(2);
public static void main(String[] args){
B b = new B();
A a = new A(3);
}
static A s2 = new A(4);
}
Run Code Online (Sandbox Code Playgroud)
执行顺序如下:1,4,2,3因为以这种方式执行类的初始化.但是,如果删除B b = new B();对象创建,这是否意味着该类不会按上述顺序初始化?最好的祝福
如果删除B b = new B(),则(A a)不会使用实例初始化声明为实例变量的引用new A(2)
在类加载时仅加载和初始化静态变量.只有在实例化类时才会初始化实例变量.
原因是: -
A a = new A(2);
Run Code Online (Sandbox Code Playgroud)
您的上述代码转换为: -
A a;
public B() {
super();
a = new A(2);
}
Run Code Online (Sandbox Code Playgroud)
由编译器.B()编译器提供的默认构造函数在哪里,因为您没有提供自己的构造函数.如果已声明自己的构造函数,则会将初始化添加到每个构造函数中.
因此,如果您没有实例化您的B类,A a则不会被初始化,因此A(int i)不会调用构造函数.