您的位置:首页 > 职场人生

发现一道有趣的有关ClassLoador的题

2017-03-05 16:20 253 查看
今天正在看ClassLoador的知识点,在网上看相应的面试题,看到一道非常好的题,理解了这道题。.class文件加载的过程也就八九不离十了,话不多说,看题。

public class ShunxuTest {

public static void main(String[] args) {
Singleton singleton = Singleton.getSingleton();
System.out.println("a"+singleton.a);
System.out.println("b"+singleton.b);
}

}

class Singleton {
private static Singleton singleton = new Singleton();
public static int a;
public static int b = 0;

Singleton() {
a++;
b++;
}

public static Singleton getSingleton() {
return singleton;
}
}


您觉得答案应该是多少呢?

1 1

1 1

1 1

1 1

1 1

1 1

1 1

1 1

1 1

1 1

吗????

?????

?????

?????

?????

?????

其实答案是1 0

给大家解析一下:

类加载器加载一个类时分三步,分别是

1. 找到对应.class文件并且加载

2. i.验证.class的正确性 ii.为静态变量分配空间并赋初始值 iii.将符号引用转换成直接引用

3. 为静态变量赋争取的初始值 & 执行静态块

好,现在我们来看一下执行的流程

首先 为静态变量初始化空间并且赋初始化值 a=0,b=0,singleton=null

然后调用getInsteance 继续调用Singleton()方法,此时 singleton =0x1354346 ,a=1,b=1

再然后为静态变量赋正确的初始化值 a不变 b=0

以上就是解析,希望我的理解对您有帮助~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题