静态内部类的一些认识---->单例模式

来源:互联网 发布:wps可以在mac上用吗 编辑:程序博客网 时间:2024/06/05 02:25

参考http://blog.csdn.net/davidluo001/article/details/50173823

question 1类加载的时候,其静态内部类是否被加载?

public class SingleDemo {public static void main(String[] args) {CEO ceo=new CEO();}}class CEO {{System.out.println("@@");}static class InnerClass{static{System.out.println("!!");}}}
运行结果:


所以,加载一个类的时候其静态内部类(包括内部类)不会被加载。因为一个类被加载,当且仅当某个静态成员(静态域、构造器、静态方法等)被调用时发生。

根据内部类不会在外部类加载的时候同时被加载这一特性,引出单例模式的另一种实现方式:

public class SingleDemo {public static void main(String[] args) {CEO ceo=CEO.getInstance();CEO ceo1=CEO.getInstance();System.out.println(ceo);System.out.println(ceo1);}}class CEO {private CEO(){System.out.println("@@");}public static CEO getInstance(){return InnerClass.INSTANCE;} static class InnerClass{public static final CEO INSTANCE=new CEO();static{System.out.println("InnerClass");}}}
运行结果:


由此可以看出:虽然调用了两次getInstance(),但最终生成了一个实例,并且内部类只加载了一次

由于内部静态类只会被加载一次,故该实现方式时线程安全

0 0
原创粉丝点击