显式初始化

一个静态域或者一个静态块,只执行一次初始化:当首次生成这个类的一个对象时,或者首次访问属于这个类的静态数据成员时(即便没有生成这个类的对象)。

例子:

class Cup{
    Cup(int marker){
        System.out.println("Cup( " + marker + " )");
    }
    
    void f(int marker){
        System.out.println("f( " + marker +" )");
    }
}

class Cups{
    static Cup cup1;
    static Cup cup2;
    static{
        cup1 = new Cup(1);
        cup2 = new Cup(2);
    }
    Cups(){
        System.out.println("Cups()");
    }
}

public class ExplicitStatic {
    public static void main(String[] args) {
        System.out.println("Inside main()");
        Cups.cup1.f(99);
    }
    static Cups cups1 = new Cups();
    static Cups cups2 = new Cups();
}
/*output:
Cup( 1 )
Cup( 2 )
Cups()
Cups()
Inside main()
f( 99 )
*/

分析:

  无论创建了多少个Cups对象,只对Cups类中的静态域和静态块执行一次初始化。

原文地址:https://www.cnblogs.com/aristole/p/8003889.html