📜  Java中的静态块static block

📅  最后修改于: 2020-03-22 13:01:35             🧑  作者: Mango

与C++不同,Java支持一个特殊的块,称为静态块(也称为static子句),该块可用于类的静态初始化。静态块中的代码仅执行一次:第一次创建该类的对象或第一次访问该类的静态成员(即使您从未创建该类的对象)。例如,检查以下Java程序的输出。

// 文件名: Main.java
class Test {
    static int i;
    int j;
    // 静态块
    static {
        i = 10;
        System.out.println("静态块被调用 ");
    }
    // 静态块结束
}
class Main {
    public static void main(String args[]) {
        // 尽管我们没有类的对象,我们还是可以调用静态块
        System.out.println(Test.i);
    }
}

输出:

静态块被调用
10

同样,静态块在构造函数之前执行。例如,检查以下Java程序的输出。

// 文件名: Main.java
class Test {
    static int i;
    int j;
    static {
        i = 10;
        System.out.println("静态块被调用");
    }
    Test(){
        System.out.println("构造函数被调用");
    }
}
class Main {
    public static void main(String args[]) {
       // 尽管我们有两个对象,静态块只会被调用一次
       Test t1 = new Test();
       Test t2 = new Test();
    }
}

输出:

静态块被调用
构造函数被调用
构造函数被调用

如果我们想为每个对象执行一些代码怎么办?
我们在Java中使用Initializer Block