public class testing {
static testing tmp = new testing();
testing() {
System.out.println("You are good");
}
public static void main(String... str) {
}
}
在上面的代码中,“您很好”被打印出来。但是我想知道为什么发生这种情况,因为构造函数是非静态方法,并且静态变量先于非静态方法执行。
答案 0 :(得分:0)
静态变量在类首次加载时初始化。在您的情况下,静态变量引用的是同一类的构造函数,因此将调用cunstructor。然后将打印语句System.out.println("You are good");
。
问类似的问题here
在以下情况下,该语句将不会打印
:// 1. Non-static declaration
testing tmp = new testing();
// 2. Initialization skipped - no call to constructor
testing tmp2 = null; //new testing();
答案 1 :(得分:0)
静态变量tmp
的声明使用构造函数初始化testing
的新实例。如果构造函数在静态变量的声明内被调用,则从技术上讲,该构造函数在技术上是非静态的都没关系。
更准确地说,在加载类定义期间的某个时刻,将初始化类的静态变量。这完全独立于代码稍后对静态或实例方法的任何调用。