static修饰的代码在类加载的时候不一定会加载
2019-01-20 本文已影响0人
大黑跟小白的日常
类中static修饰的代码在类被加载的时候不一定会加载
我们可以说A类被加载时,A类自己的static{}一定会被加载;
但不能说A类被加载时,A类中static{}都会被加载;
有一种情况就不会被加载,A类中的内部类A$B类的static{},在A类被加载时,就不会被加载;(不管静态内部类是public还是private都一样)
这里文字游戏,玩了一波,抱歉
请往下看
内部内及一些用于测试的方法 逐一测试我们看到,如果不触碰内部类相关的东西,内部类就不会被加载,它的static{}也不会被执行。并且它的加载是可以保证线程安全。
这也是一种,非常具有代表性的单例模式的实现方式。既可以实现延迟加载单例的目的,又能达到线程安全的实例化标准。
内部类被加载时,内部类自己的static修饰的代码都被加载
内部类被加载内部类被加载时,加载的是自己的静态代码块,如果内部类的静态成员属性跟外部类没关系,都不会加载外部类静态资源。