在不允许其他类创建它的实例的情况下吧,比如说 public final class Month { private static Test monitor = new Test(); private String name; private Month(String nm) { name = nm;} public String toString() { return name;} public static final Month JAN = new Month("January"), FEB = new Month("February"), MAR = new Month("March"), ..... ..... 不过通常都是声明为public。
构造函数用 private修饰了的话,在其他的类中是无法通过构造函数来创建该类的对象的,但是如果其他类需要创建这个类的实例,只能通过它提供的对外的getInstance方法,看个单例模式就明白了。class Singleton { private static Singleton instance; //将构造器使用private修饰,隐藏该构造器 private Singleton(){} //提供一个静态方法,用于返回Singleton实例 //该方法可以加入自定义的控制,保证只产生一个Singleton对象 public static Singleton getInstance() { //如果instance为null,表明还不曾创建Singleton对象 //如果instance不为null,则表明已经创建了Singleton对象,将不会执行该方法 if (instance == null) { //创建一个Singleton对象,并将其缓存起来 instance = new Singleton(); } return instance; } } public class TestSingleton { public static void main(String[] args) { //创建Singleton对象不能通过构造器,只能通过getInstance方法 Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); //将输出true System.out.println(s1 == s2); } }
如果一个类的所有(包括无参)构造函数都是private的话 , 该类也和 final 修饰的类一样不能被继承.
错! public class Test { private Test() { System.out.println("Test()"); } static class InnerClass extends Test { public InnerClass() { System.out.println("Test.InnerClass()"); } } public static void main(String[] args) throws Exception { new InnerClass(); } }
private static Test monitor = new Test();
private String name;
private Month(String nm) { name = nm;}
public String toString() { return name;}
public static final Month
JAN = new Month("January"),
FEB = new Month("February"),
MAR = new Month("March"),
.....
.....
不过通常都是声明为public。
{
private static Singleton instance;
//将构造器使用private修饰,隐藏该构造器
private Singleton(){}
//提供一个静态方法,用于返回Singleton实例
//该方法可以加入自定义的控制,保证只产生一个Singleton对象
public static Singleton getInstance()
{
//如果instance为null,表明还不曾创建Singleton对象
//如果instance不为null,则表明已经创建了Singleton对象,将不会执行该方法
if (instance == null)
{
//创建一个Singleton对象,并将其缓存起来
instance = new Singleton();
}
return instance;
}
}
public class TestSingleton
{
public static void main(String[] args)
{
//创建Singleton对象不能通过构造器,只能通过getInstance方法
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
//将输出true
System.out.println(s1 == s2);
}
}
如果你不想 让 其他类 可以 构造你写的类的时候就可以 写成 private了单例模式是屏蔽的 本类的 构造器。然后提高 了一个公开的方法 让你 构造 一个对象但是只有唯一的一个
2,单例类
3,枚举类
4,自己定义了创建自己静态工厂方法的类
public class Test { private Test() {
System.out.println("Test()");
} static class InnerClass extends Test { public InnerClass() {
System.out.println("Test.InnerClass()");
}
} public static void main(String[] args) throws Exception {
new InnerClass();
}
}
都是s1=s2=s3....=si;
就是引用都指向同一个内存地址