构造函数在什么情况下需要将一个类的构造函数私有化呀。

解决方案 »

  1.   

    在不允许其他类创建它的实例的情况下吧,比如说  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。
      

  2.   

    构造函数用 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);
    }
    }
      

  3.   


    如果你不想 让 其他类 可以 构造你写的类的时候就可以 写成 private了单例模式是屏蔽的 本类的 构造器。然后提高 了一个公开的方法 让你 构造 一个对象但是只有唯一的一个
      

  4.   

    1,纯 static 方法的工具类,比如 java.lang.System
    2,单例类
    3,枚举类
    4,自己定义了创建自己静态工厂方法的类
      

  5.   

    Utility类也需要私有化构造函数譬如Math,计算sin不需要Math的实例吧
      

  6.   

    顶,个人感觉,更多的不是为了单例,而是为了“零例”——比如Util类
      

  7.   

    如果一个类的所有(包括无参)构造函数都是private的话 , 该类也和 final 修饰的类一样不能被继承.
      

  8.   

    错!
    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();
      }
    }
      

  9.   

    单例,单例嘛,意思就是无论你创建多少条这样的语句Singleton s1 = Singleton.getInstance();
    都是s1=s2=s3....=si;
    就是引用都指向同一个内存地址