/**
* 单例:把构造方法设置为私有的,别人(其他类里)new不了,而且全局只有这一个实例,在本类里可以,因为private的性质
* 因为实例定义是final 且 static的,每次调用getSingleton()返回的就是这一个;
* 所以是每次返回的都是同一个实例。这里需要注意的是实例化操作(new Singleton();)在声明其变量时就要操作;
* 否则你放getSingleton()里,那么每次都new一个新的,那就没意义了。
*/
package class01; public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getSingleton() { return INSTANCE; } public void print() { System.out.println("this is Singleton"); } public static void main(String[] args) { Singleton singleton1 = new Singleton(); Singleton singleton2 = new Singleton(); System.out.println(singleton1 == singleton2); } }
输出为:
false
解释:
这里把new的操作放在了main中,自然是两个对象,在这里可以new,是因为在同一个类中,参见private和public的属性。
package class01; public class Main { public static void main(String[] args) { //Singleton singleton = new Singleton();//不能直接new Singleton singleton = Singleton.getSingleton(); Singleton singleton2 = Singleton.getSingleton(); System.out.println(singleton == singleton2); } }
输出:
true
解释:
返回的是同一个对象。
原文:https://www.cnblogs.com/gjmhome/p/14828572.html