类的生命周期:加载-->链接-->初始化-->使用-->卸载
Singleton.java
public class Singleton{ public static int i; private static Singleton instance = new Singleton(); public static int j = 0; private Singleton(){ i++; j++; System.out.println("constructor"); } public static void sayHi(){ System.out.println("invoke static method"); }}
Client.java
public class Client{ public static void main(String[] args){ Singleton.sayHi(); System.out.println("i="+Singleton.i); System.out.println("j="+Singleton.j); }}
输出:
constructorinvoke static methodi=1 j=0
看完上段代码后, 一定很奇怪,j为什么是0,而不是1。 其实就在于
private static Singleton instance = new Singleton();
这一句。类加载时,会为每个静态变量赋默认值,而初始化时是 用户自定义的值,而且顺序是从上到下,从左往右。