如果一个类始终只能创建一个实例,那么这个类被称作单例类。
一些特殊的应用场景可能会用到,为了保证只能创建一个实例,需要将构造方法用private修饰,不允许在类之外的其它地方创建类的实例。
又要保证可以创建该类的实例,所以需要一个public方法来创建该类的实例,由于在创建之前并没有该类的对象存在,所以只能使用类来调用此方法,故用static修饰。
同时需要将该类创建得到的实例分配一个引用才能知道该实例是否存在与是否唯一,所以需要一个成员变量保存创建的对象,同时由于该对象由上述静态方法创建,则该成员变量也必须是成员变量,与静态方法一起在类装载时初始化。
所以代码应该这样写;
import com.sun.tools.xjc.reader.xmlschema.bindinfo.BIConversion; public class SingletonTest { public static void main(String[] args){ String str = new String(); System.out.println(); if(str == null){ System.out.println("str == null"); } else if(str.equals("")){ System.out.println("str.equal('')"); } else{ System.out.println(str); } Singleton singleton = Singleton.getTheSingleton(); Singleton singleton1 = Singleton.getTheSingleton(); System.out.println(singleton == singleton1); } } class Singleton{ private static Singleton singleton; private Singleton(){}; public static Singleton getTheSingleton(){ //如果该静态对象还没初始化(对象的创建包含声明和初始化),就创建一个。 if(singleton == null) singleton = new Singleton(); return singleton; } }
java JDK中的Runtime类就是一个单例类,代表当前java程序的运行时环境,由于运行时环境的唯一性,所以该类被设计为单例类,获取该类可用如下代码
Runtime runtime = Runtime.getRuntime();
Runtime类的一个重要功能就是单独启动一个进程来运行操作系统的一个命令
runtime.exec("notepad.exe");
上述代码将启动Windows里的记事本程序。