单例设计模式与类加载顺序详解
2015-10-06 12:24
309 查看
单例设计模式几种实现 (测试所用jdk版本1.8.0_20)
第一种:
View Code
说明:
顺序是:父类静态属性-》父类静态代码块-》子类静态变量-》子类静态代码块-》父类非静态变量-》父类非静态代码块-》父类构造函数-》
子类非静态变量-》子类非静态代码块-》-》子类构造函数
这样的加载顺序不是绝对的 因为静态变量和静态代码块跟声明顺序有关。
对于如果静态代码块中调用静态变量,那么静态变量必须在静态代码块前面声明;如果静态代码块中没有调用静态变量,
那么就跟顺序有关了,谁先声明谁先被加载。说白了还是顺序加载,之所以会出现“如果静态代码块中调用静态变量,
那么静态变量必须在静态代码块前面声明”,是因为变量是声明,所以出现编译错误。
应用到内部类中 静态变量和静态代码块跟声明顺序有关。 这样就可以解释你的问题了。内部类也是类。
类静态块-类静态属性这个跟顺序有关系 如果类静态属性在类静态代码块之前 那么类静态属性先初始化
第一种:
Test 1 Construct! Test Staticcn.canon.Single.StaticInnerClassLoaderTime@15db9742 Test 2 Construct! TestInner Static! Test 3 Construct!
View Code
说明:
顺序是:父类静态属性-》父类静态代码块-》子类静态变量-》子类静态代码块-》父类非静态变量-》父类非静态代码块-》父类构造函数-》
子类非静态变量-》子类非静态代码块-》-》子类构造函数
这样的加载顺序不是绝对的 因为静态变量和静态代码块跟声明顺序有关。
对于如果静态代码块中调用静态变量,那么静态变量必须在静态代码块前面声明;如果静态代码块中没有调用静态变量,
那么就跟顺序有关了,谁先声明谁先被加载。说白了还是顺序加载,之所以会出现“如果静态代码块中调用静态变量,
那么静态变量必须在静态代码块前面声明”,是因为变量是声明,所以出现编译错误。
应用到内部类中 静态变量和静态代码块跟声明顺序有关。 这样就可以解释你的问题了。内部类也是类。
类静态块-类静态属性这个跟顺序有关系 如果类静态属性在类静态代码块之前 那么类静态属性先初始化
相关文章推荐
- 3.Python补充_Python内置函数清单
- socket初级使用(客户端)
- More Effective C++ 条款27 要求(禁止)对象产生与heap之中
- 51. N-Queens (Graph; WFS)
- 提高iOS APP性能技巧和诀窍
- jsp+mysql数据库操作常用方法实例总结
- 文章标题
- 1-10例
- UML和模式应用
- [Lintcode] Balanced Binary Tree
- 【自考】时间复杂度—数据结构导论
- Linux 管道编程
- java继承和多态、接口小结
- 关于Linux服务端被登录时,客户端登录窗口的警示信息
- MySQL客户端输出窗口显示中文乱码问题解决办法
- poj3045
- opencv笔记5:频域和空域的一点理解
- [Firefox附加组件]0004.上下文菜单项
- HDU1016 Prime Ring Problem
- iOS开发----三目运算符