我认为你的问题有两个部分:
1) 为什么静态变量 b 的值没有被初始化,而值是在构造函数中初始化的?
Ans: 首先是在 main() 之前没有调用构造函数。在 main() 中调用构造函数。每当在 main() 中,您使用new
as :
public static void main(String args[]){
MyClass myclass= new MyClass()
}
然后只调用构造函数。
在您的代码中,静态变量 b 未初始化,因为您在构造函数 A() 中对其进行了初始化,但从未调用过此构造函数。您可以在代码中调用 A() 构造函数:
public static void main(String[] args) {
A a=new A(); // constructor gets called here.
b.func();
}
2)初始化静态变量的正确方法是什么?
初始化静态变量的正确方法是使用静态初始化块,而不是在构造函数中初始化它们,如上面 duffymo 给出的答案所示。
static {
b = new B();
}
您还可以使用:
public class A {
private static B b = new B();
public A() {
}
public static void main(String[] args) {
b.func();
}
}