最近有同学问我下图中为什么程序在类里声明了一个同类名的静态对象。当时也没搞懂为什么,最近看了李刚的java讲义,才知道这个叫“单例类”,保证类只能创建一个实例。
为什么有时候只能建立一个实例呢?在上面的一小段程序中,是为了保证服务器接收端只有一个端口在接收客户端发来的信息,这个时候系统为这些类建立多个对象就没有多大意义。为了避免其他类自由创建该类的实例,我们把该类的构造器使用private修饰,从而把该类的所有构造器隐藏起来。
根据良好的封装原则:一旦把该类的构造器隐藏起来,就需要提供一个静态public方法作为该类的访问点,用于创建该类的对象,使用static修饰的原因是调用该方法之前还没有创建对象,只有类才能调用。静态方法只能访问静态变量,所以该类需要一个静态成员变量保存曾经创建的对象。下面是书上的一段例子程序:
class Singleton
{
private static Singleton single;
private Singleton get()
{
if(single==null)
{
single=new Singleton();
}
return single;
}
public class SingletonTest
{
public static void main(String args[])
{
Singleton s1=new Singleton();
Singleton s2=new Singleton();
System.out.println(s1==s2);//输出相等
}
}