JVM类的初始化步骤

  1. 假如这个类还没有被加载和连接,那就先进行加载和连接
  2. 假如类存在直接父类,并且这个父类还没有被初始化,那么就先初始化直接父类
  3. 假如类中存在初始化语句,那就依次执行这些初始化语句

类加载的初始化赋值是按照代码声明的顺序进行

public class ClassLoadTest {

	/**
	 * 当调用一个类的静态方法时触发对这个类进行初始化
	 * @param args
	 */
	public static void main(String[] args) {
		Singleton singleton = Singleton.getInstance();
		System.out.println(singleton.a);   //1
		System.out.println(singleton.b);   //1
		
		System.out.println("---------------------------");
		Singleton2 singleton2 = Singleton2.getInstance();
		System.out.println(singleton2.a);   //1
		System.out.println(singleton2.b);   //0

	}

}

/**
 * 1.类准备阶段对类中静态参数进行赋默认值 a=0,b=0,singleton=null;
 * 2.当调用静态方法getInstance()时,触发Singleton初始化按顺序初始化变量
 * 3.a=0,b=0,singleton = new Singleton()
 * 4.当触发Singleton的构造方法a=1,b=1
 */
class Singleton {
	
	public static int a;
	
	public static int b = 0;
	
	private static Singleton singleton = new Singleton();
	
	private Singleton() {
		a++;
		b++;
	}
	
	public static Singleton getInstance() {
		return singleton;
	}
	
}

/**
 * 1.类准备阶段对类中静态参数进行赋默认值 a=0,singleton=null,b=0;
 * 2.当调用静态方法getInstance()时,触发Singleton2初始化按顺序初始化变量
 * 3.a=0,singleton = new Singleton()
 * 4.当触发Singleton的构造方法a=1,b=1
 * 5.b=0(当触发b赋值时将构造方法中修改的值覆盖)
 */
class Singleton2 {
	
	public static int a;
	
	private static Singleton2 singleton = new Singleton2();
	
	public static int b = 0;
	
	private Singleton2() {
		a++;
		b++;
	}
	
	public static Singleton2 getInstance() {
		return singleton;
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值