静态内部类延迟加载测试
来源:互联网 发布:入门程序员必看书籍 编辑:程序博客网 时间:2024/05/21 09:02
1.先看代码<1>
package 内部类;public class Singleton { // 静态内部类实现单例 private static class Inner { // 单例对象 private static Singleton singleton = new Singleton(); // 类加载分为加载、链接、初始化三大步骤 // 其中链接又分为验证、准备和解析三小个步骤 // 类中静态的内容在编译阶段都会被编译到类构造函数<clinit>()中,在初始化步骤调用 // 因此这个代码块的调用标志着内部类被初始化了 static { System.out.println("内部类被解析了"); } } // 私有化构造函数 private Singleton() { // 判断单例对象是否已经存在,用于控制非法反射单例类的构造函数 if (Inner.singleton != null) try { throw new IllegalAccessException("单例对象已经被实例化,请不要非法反射构造函数"); } catch (IllegalAccessException e) { e.printStackTrace(); } } // 合法获取单例对象的途径 public static Singleton getInstance() { return Inner.singleton; } public static void main(String[] args) {//getInstance();}}输出结果:什么都没有,注意,此时getInstance()被注释了;
2.代码<2>
package 内部类;public class Singleton { // 静态内部类实现单例 private static class Inner { // 单例对象 private static Singleton singleton = new Singleton(); // 类加载分为加载、链接、初始化三大步骤 // 其中链接又分为验证、准备和解析三小个步骤 // 类中静态的内容在编译阶段都会被编译到类构造函数<clinit>()中,在初始化步骤调用 // 因此这个代码块的调用标志着内部类被初始化了 static { System.out.println("内部类被解析了"); } } // 私有化构造函数 private Singleton() { // 判断单例对象是否已经存在,用于控制非法反射单例类的构造函数 if (Inner.singleton != null) try { throw new IllegalAccessException("单例对象已经被实例化,请不要非法反射构造函数"); } catch (IllegalAccessException e) { e.printStackTrace(); } } // 合法获取单例对象的途径 public static Singleton getInstance() { return Inner.singleton; } public static void main(String[] args) { getInstance();}}
输出结果:内部类被解析了
结论:静态内部类实现了“延时加载”
3.附件,有兴趣的可以看看
public class Test {@SuppressWarnings("unchecked")public static void main(String[] args) {Class<Singleton> clazz = null;try {//Class.forName()默认会初始化类的加载,即加载、链接、初始化三个步骤都会执行//ClassLoader.load只是进行加载步骤,并未进行初始化、链接两个步骤clazz = (Class<Singleton>) Class.forName("内部类.Singleton");} catch (ClassNotFoundException e) {e.printStackTrace();}System.out.println("外部类被成功解析:"+clazz);}}
输出结果:外部类被成功解析:class 内部类.Singleton
阅读全文
0 0
- 静态内部类延迟加载测试
- 使用静态内部类实现延迟加载单例模式
- 静态内部类的加载
- 【J2SE】为什么静态内部类的单例可以实现延迟加载
- 静态内部类一些测试体会
- 内部类,静态内部类
- 内部类----静态内部类
- 静态内部类&非静态内部类
- 静态内部类&非静态内部类
- 静态内部类&非静态内部类
- 朝花夕拾——Java静态内部类加载
- Java类的加载,以及静态内部类的问题。
- Java类的加载,以及静态内部类的问题。
- 内部类加载顺序及静态内部类单例模式
- 内部类---静态内部类和非静态内部类
- 静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式
- 静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式
- 静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式
- Socket编程 (连接,发送消息) (Tcp、Udp) ,这个是同步,跟上一篇差不多
- SQL Server查看视图字段列表
- HBase详细概述
- 指定Jboss的JDK
- 【loli的胡策】联校10.26(抖动dp+树形dp*期望)
- 静态内部类延迟加载测试
- Add Digits
- 感悟和体会数据结构和算法
- 从JAVA工程师到入门级别大数据科学家的成长路径
- opencv学习——自适应阈值二值化
- Noip数论
- Django框架使用注意点-笔记小结
- freemarker语法笔记
- 输入框只能填写数字,其他值自动清空