黑马程序员技术交流社区

标题: 构造方法private类型 [打印本页]

作者: 朱冰18189949658    时间: 2014-8-12 23:08
标题: 构造方法private类型
什么时候把构造方法定义成private类型?这样定义有什么好处?
作者: wnmmp    时间: 2014-8-12 23:27
单例模式就是用的private,如果不用private,外面程序可以new多个对象,那就不是单例了
作者: 朱冰18189949658    时间: 2014-8-12 23:42
wnmmp 发表于 2014-8-12 23:27
单例模式就是用的private,如果不用private,外面程序可以new多个对象,那就不是单例了 ...

能举一个用private类型的构造函数设计出的单例模式吗?做好能突出这样做的好处
作者: wnmmp    时间: 2014-8-13 00:46
本帖最后由 wnmmp 于 2014-8-13 00:52 编辑
朱冰18189949658 发表于 2014-8-12 23:42
能举一个用private类型的构造函数设计出的单例模式吗?做好能突出这样做的好处 ...

这是我在基础测试遇到的一题,首先没有private时,直接可以new两个Single对象,打印显示他们的地址值不一样:
  1. public class Test5 {
  2.         public static void main(String[] args) {
  3.                 System.out.println(new Single());
  4.                 System.out.println(new Single());
  5.                 }
  6.         }
  7. class Single
  8. {
  9.         Single(){}
  10.         private static Single s = null;
  11.         public static Single getInstance()
  12.         {
  13.                 if(s==null)
  14.                         s = new Single();
  15.                 return s;
  16.         }
  17. }
  18. /*结果如下:
  19. com.itheima.Single@1c80b01
  20. com.itheima.Single@4aa0ce
  21. * */
复制代码


当有private时,如果new的话直接报错,利用getInstance获取两次都是同一个对象,地址值一样:
  1. public class Test5 {
  2.         public static void main(String[] args) {
  3.                 System.out.println(Single.getInstance());
  4.                 System.out.println(Single.getInstance());
  5.                 }
  6.         }
  7. class Single
  8. {
  9.         private Single(){}
  10.         private static Single s = null;
  11.         public static Single getInstance()
  12.         {
  13.                 if(s==null)
  14.                         s = new Single();
  15.                 return s;
  16.         }
  17. }
  18. /*结果如下:
  19. com.itheima.Single@290fbc
  20. com.itheima.Single@290fbc
  21. * */
复制代码



作者: 舍我其谁    时间: 2014-8-13 01:12
不想让别人创建对象时




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2