标题可能不容易理解,但基本上我已经在某些程序中看到了这一点,我很好奇,为了清除问题,我已将代码简化到可以集中讨论我的问题的程度。
public class A {
public A() {
System.out.println("constructor");
}
static{
System.out.println("static");
}
}
-
public class B {
public static void main(String[] args) {
A a = new A();
}
}
当我运行代码时输出为:
静态
构造
带括号的这个静态究竟是什么?从它的外观看起来它似乎在使用类时运行括号内的代码,但如果我们有构造函数,为什么存在?我们不能把我们需要的代码放在构造函数中初始化吗?它似乎在构造函数之前运行它的代码,因为单词static出现在单词构造函数之前,为什么会这样呢?
答案 0 :(得分:0)
这是静态初始化块,请检查here
public class Test{
public Test(){
// constructor initialization
}
static{
// static initializer
}
{
// instance initializer
}
}
初始化顺序是静态初始化程序,实例初始化程序,构造函数初始化程序。