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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

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

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

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

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

评分

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

查看全部评分

15 个回复

倒序浏览
本帖最后由 范龙波 于 2013-9-1 15:05 编辑

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

评分

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

查看全部评分

回复 使用道具 举报
这个真心不可以,如果去掉了,外部可以使用构造方法了.怎么实现 "单实例"呢

评分

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

查看全部评分

回复 使用道具 举报
那请问系统默认的隐式构造函数的权限是private的吗?!
回复 使用道具 举报
亲,不可以,默认生成的构造方法是同包访问,就是只要和这个类在一个包下面的类都可以访问到,而单例模式是不允许外界任何类直接访问,所以不能去掉!菜鸟,希望对你有帮助
回复 使用道具 举报
绝对不可以,单例的目的就是不让new对象,如果你不把构造函数私有化也就是不写,那么他就默认是被default修饰的构造函数,也就是说这个对象可以被同一个包名下的其他类创建对象,那么这个就不是单例了。

评分

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

查看全部评分

回复 使用道具 举报
楼上的正解,默认的无参构造函数是default的,不是private的
回复 使用道具 举报
单例模式想要保证对象唯一有以下三部
1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

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

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

评分

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

查看全部评分

回复 使用道具 举报
如果您的问题已经解决
请更改分类未解决为已解决
保持队形,谢谢合作

详情参考 如何修改分类
回复 使用道具 举报
隐式不代表私有,如果构造方法不私有,那么就可以随便new其对象了
回复 使用道具 举报
题目是单例模式 不是单利,没有写构造函数 就默认为public形式的 不能进行 单例设计
回复 使用道具 举报
你用java逆向工具逆向一下编译之后的class文件,就会发现,省略的构造函数是default类型。单例设计模式的基础就是从私有化构造函数开始的,构造函数不私有化,还谈什么单例模式呢?
回复 使用道具 举报
那行代码是为了代替默认的构造方法;public single(){};所以不能去掉,去掉的话就可以直接new一个实例了,那么单态设计模式就毫无意义了。
回复 使用道具 举报
它写的这个单例是把构造函数私有化了.
回复 使用道具 举报
私有化构造函数是为了防止别人创建对象,默认的构造函数是没有这个功能的
先搞清楚什么事单例模式
回复 使用道具 举报
首先告诉楼主,去掉构造函系统会隐式的分配一个构造函数这是正确的。可是,这个被分配的构造函数依旧可以被被人用来创建实例。
  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. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马