static修饰的代码在类加载的时候不一定会加载

类中static修饰的代码在类被加载的时候不一定会加载


我们可以说A类被加载时,A类自己的static{}一定会被加载;

但不能说A类被加载时,A类中static{}都会被加载;

有一种情况就不会被加载,A类中的内部类A$B类的static{},在A类被加载时,就不会被加载;(不管静态内部类是public还是private都一样)

这里文字游戏,玩了一波,抱歉

请往下看

15253776-8a45fa80e49de639.png
内部内及一些用于测试的方法
15253776-fd1f9a98f03591ed.png
逐一测试

我们看到,如果不触碰内部类相关的东西,内部类就不会被加载,它的static{}也不会被执行。并且它的加载是可以保证线程安全

这也是一种,非常具有代表性的单例模式的实现方式。既可以实现延迟加载单例的目的,又能达到线程安全的实例化标准。


内部类被加载时,内部类自己的static修饰的代码都被加载

15253776-47f1e70e1aab7326.png
内部类被加载

内部类被加载时,加载的是自己的静态代码块,如果内部类的静态成员属性跟外部类没关系,都不会加载外部类静态资源。

猜你喜欢

转载自blog.csdn.net/weixin_33790053/article/details/87411098
今日推荐