代码如下: public class Singleton {
private final static Singleton INSTANCE = new Singleton();
// Private constructor suppresses
private Singleton() {}
// default public constructor
public static Singleton getInstance() {
return INSTANCE;
}
}为什么方法要static的?
如果不是静态方法会怎么样?
private final static Singleton INSTANCE = new Singleton();
// Private constructor suppresses
private Singleton() {}
// default public constructor
public static Singleton getInstance() {
return INSTANCE;
}
}为什么方法要static的?
如果不是静态方法会怎么样?
public class Singleton {
private final static Singleton INSTANCE = new Singleton();
// Private constructor suppresses
private Singleton() {}
private static Singleton getTheInstance() {
return INSTANCE;
} public Singleton getInstance() {
return getTheInstance();
}
}这样还能算单例模式吗?
这样写,我理解为不能算单例模式了
你这样写了以后 请问 你怎么使用INSTANCE这个单例对象??
所以单例最终概念是始终获取一个相同对象,好处是可以更好节约空间,节约时间,并且可以很好解决多线程以及并发很高的问题!
是否会用到实例成员,如果没有实例成员就定义为static,这样的
方法可以称为工具方法。当然理论上你也可以定义为实例的,但是不
建议你这么做,因为这也算是java中一个约定俗成的了,当然没有
明确规定一定要用static,只是这一个小地方在将来工作时也就能
看出一个人对java细节的把握了。你也可以去看一下jdk中的Math就
都是静态的,那就只是一个工具类而已。
把static initializer换成instance initializer就会造成潜在的StackOverflowError的隐患
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 此处使用一个内部类来维护单例 */
private static class SingletonFactory {
private static Singleton instance = new Singleton();
}
/* 获取实例 */
public static Singleton getInstance() {
return SingletonFactory.instance;
}
/* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */
public Object readResolve() {
return getInstance();
}
}