这是 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);
}
执行顺序如下:1,4,2,3,因为类的初始化是这样执行的。
但是,如果删除 B b = new B();
对象创建,是否意味着该类不会按上述顺序初始化?
最好的问候
最佳答案
如果删除 B b = new B()
,则声明为实例变量的引用 (A a)
将不会使用实例 new 进行初始化A(2)
在类加载时仅加载并初始化静态变量。实例变量仅在实例化类时才初始化。
原因是:-
A a = new A(2);
您的上述代码将转换为:-
A a;
public B() {
super();
a = new A(2);
}
由编译器执行。其中 B()
是编译器提供的默认构造函数,因为您没有提供自己的构造函数。如果您声明了自己的构造函数,则初始化将添加到每个构造函数中。
因此,如果您不实例化 B
类,A a
将不会被初始化,因此构造函数 A(int i)
不会被调用。
关于java - 初始化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278500/