现在的位置: 首页 > 综合 > 正文

张龙JVM001中的Singleton

2013年10月14日 ⁄ 综合 ⁄ 共 815字 ⁄ 字号 评论关闭
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

抱歉!评论已关闭.