tij3中解释为:(我看不懂,哎)
"这样就能保证,你不会一不小心就把这个方法移到package的其它地方,从而造成你自己都不能删除或修改的尴尬了。方法设成private后,这项权利就被保留下来。"=====
"从而造成你自己都不能删除或修改的尴尬了。"能举个例子吗,针对这种情况。

解决方案 »

  1.   

    第五章看完了,得出如下看法,其中b是最重要的!不知道是否正确,请指正!a.一般的方式需要new来创建对象,后面的方式不需要new 呵,简单些~不过这跟TIJ3中的意思不合,它好像还是说直接调用构造函数不好。
    b.实际上书中所说不能用构造函数创建此对象,但用户还是可以用你定义的静态方法来完成这个功能;本人理解的是这是一种"约定",即如果类的创建者不公开构造函数的话,客户程序员就不要创建这个类的对象了,即也不要调用其静态方法来创建对象。
    c.此种做法的特殊用途:比如统计该类的对象的个数,例如需要限制线程数目时 可以这样做。
      

  2.   

    Private constructors are used to:
    1. prevent a class from being explicitly instantiated by users of the class
    2. precent from being inherited.The class with private constructors has similar effect with a final class. And two things always combined together. You can refer to the source code of java.lang.System or Math class.And singleton pattern implementation in java will ofter use private constructors, though other constructors are used rarely to allow inheritance.
      

  3.   

    2. prevent a class from being inherited.
      

  4.   

    wobelisk说得对,这样可以只有它自己可以实例化类,而且不能被继承;还有就是静态方法的作用是保证这个类只有一个实例。如果你需要整个程序只有一个实例的情况:比如打印机等,就可以使用这种方式定义类。
      

  5.   

    谢谢wobelisk跟Gigle的回答!不过还有些困惑!1.该类好像可以有多个实例!么很有几个网友都认为这属于singleton模式?
    2.对于继承,该类真不能继承吗?嗯,好像静态方法是非面向对象的,试试3.对于这两句话仍不理解
    "prevent a class from being explicitly instantiated by users of the class"
    "这样可以只有它自己可以实例化类,"
    。我还是有我原来的想法,是不是有点钻牛角尖了???"但用户还是可以用你定义的静态方法来完成这个功能",
      

  6.   

    1.该类确实可以有多个实例,是multiton,先前我看错了。
    2.构造函数设为private的用意是控制这个类的实例化过程,即该类不允许继承,只能通过静态方法得到该类的实例,通过定制构造函数达到控制实例化的目的。
      

  7.   

    1. 要仅创建一个实例当然还需要在makeObject的静态方法里面限制一下啦,比如没有创建才创建,创建好了就直接返回。2. 用户通过定义的静态方法来完成类似于继承的实现,实际上不是继承,而是包裹。或者说聚集。3. 这种方法可以防止任意创建对象,可以对创建的对象进行精确管理,例如你前面说到的线程池。你可以把创建的对象,放到该类的一个静态容器中,这种灵活性自己考虑了。4. 通过一个串表达的名字,获取一个以该名字命名的对象,比如MessageDigest类里面的
    static MessageDigest getInstance(String algorithm);
      

  8.   


    这是单例模式的标准实现参见《设计模式》目的为限制客户程序员new Object
      

  9.   

    哦,看错了,是factory模式封装的目的是为了,应对变化,
    将new 封装, 目的是封装new的过程, 意义不言自明
     呵呵
      

  10.   

    现整理如下,请各位指正:
    A.为扩展
    封装的目的是为了,应对变化,将new 封装, 目的是封装new的过程, 意义不言自明
    new的过程 ,可能会变化,所以用了工厂模式 ,此处封装的目的主要是为了扩展,以后可根据需要在此处加代码呵B.如果父类只有private的构造函数,则绝对不允许继承此类!
    假设要继承则需自动合成父类的构造函数或显示调用父类的构造函数,但父类的构造函数对子类不可见,不能完成自动合成,所以不允许继承。
      

  11.   

    A 里面提到的“以后可根据需要在此处加代码” 不一定正确。例如:
    父类用来创建对象的静态成员函数,调用父类的虚拟clone方法呢?效果自己考虑。
      

  12.   

    父类用来创建对象的静态成员函数,调用父类的虚拟clone方法呢?效果自己考虑。===========
    惭愧 ,还不知道clone方法,先记下来,谢谢zengpan_panpan的解答呵!
      

  13.   

    xyjbn(无聊也是一种错) 怎么说话呢?????????????