与关键字静态混淆,在类中使用括号

时间:2016-03-30 16:28:31

标签: java

标题可能不容易理解,但基本上我已经在某些程序中看到了这一点,我很好奇,为了清除问题,我已将代码简化到可以集中讨论我的问题的程度。

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出现在单词构造函数之前,为什么会这样呢?

1 个答案:

答案 0 :(得分:0)

这是静态初始化块,请检查here

public class Test{
    public Test(){
        // constructor initialization
    }

    static{
        // static initializer
    }

    {
        // instance initializer
    }

}

初始化顺序是静态初始化程序,实例初始化程序,构造函数初始化程序。