发现一道有趣的有关ClassLoador的题
2017-03-05 16:20
253 查看
今天正在看ClassLoador的知识点,在网上看相应的面试题,看到一道非常好的题,理解了这道题。.class文件加载的过程也就八九不离十了,话不多说,看题。
您觉得答案应该是多少呢?
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
以上就是解析,希望我的理解对您有帮助~
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
以上就是解析,希望我的理解对您有帮助~
相关文章推荐
- 【预习笔记】一道很有趣的有关java类加载初始化的题目
- 在Spring中发现java.lang.ClassCastException: $Proxy6问题解析
- 发现一个专么收集Google图标的有趣站点
- 有关Java链表概念的有趣问题
- 发现一些有趣的HTML Tag
- Reverse Linked List以及一道有关倒序的题目
- 一道有关hash的POJ题目:POJ1200 Crazy Search
- 有关jenkis启动发现jobs都消失的问题
- 网上有关"回车"和"换行"的一个有趣说法
- 一道有趣的题目
- 一道有趣的智能问题
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 一道面试题引发的有关随机数的思考(2)
- struts 2学习(有关Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory的错误)
- c++写一个类后编译发现class重定义
- 一道有趣的几何证明题
- 一道有关数据类型的笔试题
- 有关Apache Ignite的peer class loading (P2P class loading)
- 从大牛代码中发现的一个有趣算法。。
- 有关java class文件出错的问题!!!