一尘不染

Java 静态初始化块

java

据我了解,“静态初始化块”用于设置静态字段的值(如果无法在一行中完成的话)。

但是我不明白为什么我们需要为此设置一个特殊的块。例如,我们将字段声明为静态(无值分配)。然后编写几行代码,生成并为上面声明的静态字段分配一个值。

为什么我们需要在这样一个特殊的块这样的行:static {...}


阅读 280

收藏
2020-02-27

共1个答案

一尘不染

在非静态块:

{
    // Do Something...
}

每次构造类的实例时被调用。在静态块只被调用一次,当类本身初始化,无论该类型的有多少对象创建。

例:

public class Test {

    static{
        System.out.println("Static");
    }

    {
        System.out.println("Non-static block");
    }

    public static void main(String[] args) {
        Test t = new Test();
        Test t2 = new Test();
    }
}

打印:

Static
Non-static block
Non-static block
2020-02-27