深入理解java虚拟机系列文章:类的加载、连接与初始化

类开始加载到运行要经过以下几个步骤:

加载:查找并加载类的二进制数据(加载到内存中

连接

验证:确保被加载的类的正确性

准备:为类的静态变量分配内存,并将其初始化为默认值

解析:把类中的符号引用转换为直接引用

初始化:为类的静态变量赋予正确的初始值(用户赋予的值)

下面看一个例子:

package com.naxsu.jvm;
class Singleton {
//	private static Singleton singleton=new Singleton();//放在前面,输出1和0
	public static int count1;
	public static int count2 = 0;
	private static Singleton singleton=new Singleton();//放在后面,输出1和1

	private Singleton() {
		count1++;
		count2++;
	}
	
	public static Singleton getInstance(){
		return singleton;
	}

}

public class MyTest {
	public static void main(String[] args) throws ClassNotFoundException {
		Singleton singleton= Singleton.getInstance();
		System.out.println(singleton.count1);
		System.out.println(singleton.count2);
	}
}

我们来分析一下这个类的运行过程:

1.       Singleton类的二进制数据被加载到内存中。

2.      验证类的正确性

3.      为count1count2为配内存,为都赋予默认值0,singleton =null

4.       

l  放在前面那种情况,singleton =new Singleton(),count1count2都为1,然后给静态变量赋予正确的初始值,这里用户给count2初始化的值是0,所以最后输出是1和0

l  给静态变量赋予正确的初始值,这里用户给count2初始化的值是0,singleton =new Singleton(),count1count2都为1,所以最后输出是1和1


转载请注明出处: http://bbs.naxsu.com/forum.php?mod=viewthread&tid=24



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值