A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱冰18189949658 中级黑马   /  2014-8-12 23:08  /  1394 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候把构造方法定义成private类型?这样定义有什么好处?

4 个回复

倒序浏览
单例模式就是用的private,如果不用private,外面程序可以new多个对象,那就不是单例了
回复 使用道具 举报
wnmmp 发表于 2014-8-12 23:27
单例模式就是用的private,如果不用private,外面程序可以new多个对象,那就不是单例了 ...

能举一个用private类型的构造函数设计出的单例模式吗?做好能突出这样做的好处
回复 使用道具 举报
本帖最后由 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. * */
复制代码


回复 使用道具 举报 1 0
不想让别人创建对象时
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马