一个静态域或者一个静态块,只执行一次初始化:当首次生成这个类的一个对象时,或者首次访问属于这个类的静态数据成员时(即便没有生成这个类的对象)。
例子:
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类中的静态域和静态块执行一次初始化。