你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
发现
动态
话题
发起
问题
登录
Java
关于静态变量初始化顺序规则的一些问题
为什么答案是0和1。。。不是很明白
没有找到相关结果
已邀请:
与内容相关的链接
提交
3 个回复
wangxiaolei
程序的执行顺序有关,单例模式执行完后,count2又执行了一次赋值操作。
如果顺序调整下面的:
public static int counter1;
public static int counter2=0;
private static Singleton singleton = new Singleton();
你再看看结果。
macg
-
80后IT男
实际顺序是:
1.
count1:0
count2:0
2.
count1:1
count2:1
3.
count1:1
count2:0
头太重
可以看下 深入理解java 虚拟机 -- 其中类加载过程。
1:SingleTon singleTon = SingleTon.getInstance();调用了类的SingleTon调用了类的静态方法,触发类的初始化
2:类加载的时候在准备过程中为类的静态变量分配内存并初始化默认值 singleton=null count1=0,count2=0
3:类初始化化,为类的静态变量赋值和执行静态代码快。singleton赋值为new SingleTon()调用类的构造方法
4:调用类的构造方法后count=1;count2=1
5:继续为count1与count2赋值,此时count1没有赋值操作,所有count1为1,但是count2执行赋值操作就变为0
要回复问题请先
登录
或
注册
发起人
赖伟华
学生
问题状态
最新活动:
2017-08-30 17:06
浏览:
1748
关注:
4
人
3 个回复
wangxiaolei
如果顺序调整下面的:
public static int counter1;
public static int counter2=0;
private static Singleton singleton = new Singleton();
你再看看结果。
macg - 80后IT男
1.
count1:0
count2:0
2.
count1:1
count2:1
3.
count1:1
count2:0
头太重
1:SingleTon singleTon = SingleTon.getInstance();调用了类的SingleTon调用了类的静态方法,触发类的初始化
2:类加载的时候在准备过程中为类的静态变量分配内存并初始化默认值 singleton=null count1=0,count2=0
3:类初始化化,为类的静态变量赋值和执行静态代码快。singleton赋值为new SingleTon()调用类的构造方法
4:调用类的构造方法后count=1;count2=1
5:继续为count1与count2赋值,此时count1没有赋值操作,所有count1为1,但是count2执行赋值操作就变为0