package com.zeph.jvm1; public class Singleton { private static Singleton singleton = new Singleton(); public static int a; public static int b = 0; private Singleton() { a++; b++; } public static Singleton getSingleton() { return singleton; } public static void main(String[] args) { Singleton singleton = Singleton.getSingleton(); System.out.println(singleton.a); System.out.println(singleton.b); } }
输出1和0,调用类的静态方法,主动加载类,但尚未初始化,然后初始化,首先初始化new Singleton(),此时a=1,b=1,然后初始化b=0,于是输出1和0
package com.zeph.jvm1; public class Singleton { public static int a; public static int b = 0; private static Singleton singleton = new Singleton(); private Singleton() { a++; b++; } public static Singleton getSingleton() { return singleton; } public static void main(String[] args) { Singleton singleton = Singleton.getSingleton(); System.out.println(singleton.a); System.out.println(singleton.b); } }
输出1和1
反之,最后初始化newSingleton,所以是1和1