gpt4 book ai didi

java - 初始化类

转载 作者:行者123 更新时间:2023-12-01 07:34:58 26 4
gpt4 key购买 nike

这是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com