//懒汉式单例类.在第一次调用的时候实例化 public class Singleton2 {
//私有的默认构造子
private Singleton2(){}
//注意,这里没有final
public static Singleton2 sing=null;
//静态工厂方法
public static synchronized Singleton2 singleton2(){
if(sing == null)
sing=new Singleton2();
return sing;
}
public class Singleton1{
private Singleton1(){}
public static Singleton1 sing2=new Singleton1();
public static Singleton1 getInstance(){
return sing2;
}
}
}</pre>
首先静态方法不能使用非静态变量
你Singleton1是一个内部类,编译器的提示是内部类中声明静态变量必须这个类也得有static修饰。
其实想想静态资源加载过程就能想通这点。静态资源在程序启动时初始化,非静态资源在运行时初始化。
把内部类的public去了吧,static变量会一直存在,忘了懒汉和饿汉的实现方式吧,可以使用懒加载初始化的方法来解决单例的需求。
http://en.wikipedia.org/wiki/Singleton_pattern#Lazy_initialization
示例:
publicclassMemoryFactory{privateMemoryFactory(){}privatestaticclassSingletonHolder{publicstaticfinalMemoryMEMORY=newMemory(getDataSource());//publicstaticfinalMemoryMEMORY=newMemory(newSimpleDataSource());}publicstaticMemorygetInstance(){returnSingletonHolder.MEMORY;}publicstaticfinalDataSourcegetDataSource(){try{Contextcontext=newInitialContext();return(DataSource)context.lookup("java:comp/env/jdbc/test");}catch(NamingExceptione){thrownewRuntimeException(e);}}}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。