public class Singleton{ private static Singleton sl; private Singleton(){ System.out.println("初始化"); } public static Singleton getInstance(){ if(sl==null) sl=new Singleton(); return sl; } public static void main(String[] args){ Singleton sl=Singleton.getInstance(); Singleton sl2=Singleton.getInstance(); } }运行结果是显示一个初始化
所以有
/*** * 饿汉模式 */ public class Singleton2{ private final static Singleton2 sl2=new Singleton2(); private Singleton2(){ System.out.println("初始化"); } public static Singleton2 getInstance(){ return sl2; } public static void main(String[] args){ Singleton2 sl2=Singleton2.getInstance(); Singleton2 sl3=Singleton2.getInstance(); } }这种单例模式,我们在类加载的时候,就把类变量new出来。这种方式我们称之为饿汉模式。
public class Singleton3{ private static class hold{ private final static Singleton3 sl3=new Singleton3(); } private Singleton3(){ System.out.println("初始化"); } public static Singleton3 getInstance(){ return hold.sl3; } public static void main(String[] args){ Singleton3 sl3=Singleton3.getInstance(); Singleton3 sl4=Singleton3.getInstance(); System.out.println(sl3==sl4); } }关于内部类与static,final的分析,我们这里暂时不讲。
内部类是java支持的,但是在别的语言中,不一定。
原文地址:http://blog.csdn.net/dlf123321/article/details/42062669