发现一道有趣的有关ClassLoador的题
来源:互联网 发布:一叶而知四季 编辑:程序博客网 时间:2024/05/16 13:38
今天正在看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
以上就是解析,希望我的理解对您有帮助~
0 0
- 发现一道有趣的有关ClassLoador的题
- 一道有趣的题
- 有趣的一道题
- 一道有趣的java题
- 一道有趣的笔试题
- 一道有趣的算法题
- 一道有趣的sql题
- 一道有趣的sql题
- 一道有趣的算法题
- 一道有趣的笔试题
- 一道有趣的逻辑题
- 一道有趣的算法题。。。
- 一道有趣的编程题
- 一道有趣的逻辑题
- 一道有趣的题目
- 一道有趣的题目
- 一道有趣的题目
- 一道有趣的数学题
- caffe学习笔记29-关于目标检测
- Unity3D 初级课程之新手入门总结
- ListView 使用(1)
- 习题35,分支和函数,笨方法学python
- hdu1312
- 发现一道有趣的有关ClassLoador的题
- 《机器学习实战》K-近邻算法代码解析(1)
- 星型模型和雪花型模型比较
- 函数式编程
- 湖边的烦恼-算法训练题
- JAVA,循环依赖,Spring
- 堆排序 java
- java中try 与catch的使用
- Web.xml配置详解之context-param