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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Nero 中级黑马   /  2013-9-1 14:58  /  1811 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-3 08:50 编辑

如题...................................................

$6C(PBXTJSBOP_$Y9}9AXVX.jpg (29.64 KB, 下载次数: 17)

这个构造函数可不可以去掉,去掉的话,系统会默认自动分配一个相同的隐式构造函数!对吧 所有这句话有没有 ...

这个构造函数可不可以去掉,去掉的话,系统会默认自动分配一个相同的隐式构造函数!对吧  所有这句话有没有 ...

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

15 个回复

正序浏览
首先告诉楼主,去掉构造函系统会隐式的分配一个构造函数这是正确的。可是,这个被分配的构造函数依旧可以被被人用来创建实例。
  1. class Singleton
  2. {
  3.         //使用一个变量来缓存曾经创建的实例
  4.         private static Singleton instance;
  5.         //将构造器使用private修饰,隐藏该构造器
  6.         private Singleton(){};
  7.        
  8.         //提供一个静态方法,用于返回Singleton实例
  9.         //该方法可以加入自定义的控制,保证只产生一个Singleton对象
  10.         public static Singleton getInstance(){
  11.                 //如果instance为null,表明还不曾创建Singleton对象
  12.                 //如不为null,则表明已经创建了Singleton对象
  13.                 if(instance==null){
  14.                         //创建一个Singleton对象,并将其缓存起来
  15.                         instance = new Singleton();
  16.                 }
  17.                 return instance;
  18.         }

  19. }

  20. class TestSingleton
  21. {
  22.         public static void main(String[] args){
  23.                 //创建Singleton对象不能通过构造器,只能通过getInstance()创建
  24.                 Singleton s1 = Singleton.getInstance();
  25.                 Singleton s2 = Singleton.getInstance();
  26.                 //输出 true的哦(单例)
  27.                 System.out.println(s1==s2);
  28.         }
  29. }
复制代码
回复 使用道具 举报
私有化构造函数是为了防止别人创建对象,默认的构造函数是没有这个功能的
先搞清楚什么事单例模式
回复 使用道具 举报
它写的这个单例是把构造函数私有化了.
回复 使用道具 举报
那行代码是为了代替默认的构造方法;public single(){};所以不能去掉,去掉的话就可以直接new一个实例了,那么单态设计模式就毫无意义了。
回复 使用道具 举报
你用java逆向工具逆向一下编译之后的class文件,就会发现,省略的构造函数是default类型。单例设计模式的基础就是从私有化构造函数开始的,构造函数不私有化,还谈什么单例模式呢?
回复 使用道具 举报
题目是单例模式 不是单利,没有写构造函数 就默认为public形式的 不能进行 单例设计
回复 使用道具 举报
隐式不代表私有,如果构造方法不私有,那么就可以随便new其对象了
回复 使用道具 举报
如果您的问题已经解决
请更改分类未解决为已解决
保持队形,谢谢合作

详情参考 如何修改分类
回复 使用道具 举报
单例模式想要保证对象唯一有以下三部
1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

这三部怎么用代码体现呢?
1.将构造函数私有化。
2.在类中创建一个本类对象。
3.提供一个方法可以获取到该对象。

所以这段代码是不可以去掉的,系统默认那个不是私有的

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
楼上的正解,默认的无参构造函数是default的,不是private的
回复 使用道具 举报
绝对不可以,单例的目的就是不让new对象,如果你不把构造函数私有化也就是不写,那么他就默认是被default修饰的构造函数,也就是说这个对象可以被同一个包名下的其他类创建对象,那么这个就不是单例了。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
亲,不可以,默认生成的构造方法是同包访问,就是只要和这个类在一个包下面的类都可以访问到,而单例模式是不允许外界任何类直接访问,所以不能去掉!菜鸟,希望对你有帮助
回复 使用道具 举报
那请问系统默认的隐式构造函数的权限是private的吗?!
回复 使用道具 举报
这个真心不可以,如果去掉了,外部可以使用构造方法了.怎么实现 "单实例"呢

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 范龙波 于 2013-9-1 15:05 编辑

不可以.............你要看清楚 , 它写的这个单例是把构造函数私有化了.
设计单例的三个步骤:
1.创建私有成员引用
2.私有构造函数
3.暴露获取实例对象的方法

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马