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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小Zeor……… 中级黑马   /  2014-2-27 00:14  /  1318 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Single {

        private Single(){}

       
        public static Single a = new Single();


       
}

评分

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

查看全部评分

9 个回复

倒序浏览
可以的,private Single(){} 构造函数私有化 这样别人就不能构造该类的对象的了。另外,楼主需要添加成员函数将自己生产的public static Single a返回给调用者,不然别人没法使用。

评分

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

查看全部评分

回复 使用道具 举报
有了构造方法,但要对外提供访问方式啊.不然就用不了.
还有不能用public来修饰,要用private修饰.以防止外界用"类名. a "调用.

评分

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

查看全部评分

回复 使用道具 举报
定义静态生命周期太长啦吧,太消耗资源啦。
回复 使用道具 举报
综合了这两句, private static Single a = new Single();
public static Single getInstance(){
   return a;
}
可以的,楼上说的那个明显就没有在意到你的实例变量Single已经设置成public了
不过这样非主流不是挺好,清一色的private的成员变量比较好,符合面向对象的设计,谁拥有数据,设置成私有随提供操作数据的方法

评分

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

查看全部评分

回复 使用道具 举报
这样写确实是可以的,你写的其实就是枚举吧。
public enum Single {
        ME
}
枚举的构造函数就是私有的。
枚举的成员只有一个的时候,也可以用于单例设计模式的。

评分

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

查看全部评分

回复 使用道具 举报
单例的说明,字面说,单是单个,唯一的意思。例是实例的意思。
单例是保证对象的唯一性。
无论饿汉式还是懒汉式。
都建立在一个基础上,构造私有,外部无法创建对象。
     而无法创建对象的情况下要得到单例的对象该怎么办呢?(无视反射核武!)只能调用获取对象的方法,返回对象。而且没有对象的时候只能是类名调用,类名调用的前提那么返回对象的方法就必须是静态的。
    再接着而静态的方法只能访问静态的成员变量或者成员函数,以至于你在外部new一个对象,对象也必须修饰Static。这一切都是相辅相成的哦。
    楼主你写的方法还不完整,因为没有返回对象的方式。
     而由于你是先创建的对象,而没有经过调用方法再判断对象是否为空,然后创建以及return对象的步骤,所以可以理解为你写的是一个不完整的饿汉式单例哦
   这么深入浅出的回答,丝丝入扣。斑竹不给分说不过去啊。
回复 使用道具 举报
李白衣 发表于 2014-2-27 10:35
这样写确实是可以的,你写的其实就是枚举吧。
public enum Single {
        ME

   回答正确,枚举也是单例的一种体现,为了保证元素的唯一性,避免被外部调用构造。
特别进行了私有。
   但是要注意的是,任何一个类,或者方法进行了封装。不仅仅要完成隐藏代码的实现细节,
更要提供公共的对外访问方式,不然这么做就没有意义。(不要跟我说反射)
   比如抽象类不能进行实例化,但是抽象方法可以被重写,非抽象可以被多条调用,成员变量也是一个道理。
   包括接口,也有其必须被重写覆盖的规则。
所以枚举也不例外,也必须添加入口,根据需求写调用语句哟,至于得到什么,就另说了。
回复 使用道具 举报
平凡成就非凡 发表于 2014-2-27 00:53
定义静态生命周期太长啦吧,太消耗资源啦。

我再科普一下,赚分。
请注意哦
在JDK中,Runtime类的底层,其实就是单例。
源码就是饿汉式,对象在函数外部创建好了。
虽然牺牲了空间(仅仅一个对象实在是不值一提),但是线程更安全。
这不是我说的,这是SUN公司的选择,跟着老大有饭吃。
这才有开发用饿汉,面试吹懒汉的说法。
为什么这么说呢?那么就要说到懒汉式单例的特点。
懒汉式是在外部定义null的对象,方法内部进行null的判断,然后创建,再返回对象,看起来
耍了一套组合拳,很帅很花哨。有是延迟加载的思想又是判断什么的,啧啧多专业。实际上
复杂也带来了安全问题。
因为这样就满足了线程安全判断的条件,是否有共有元素(创建的对象),是否被多条语句执行。
(创建对象语句判断对象语句返回对象语句..)然后是多个线程条件(这个是可能具备的。)
也就是说,一旦外部的人有心,就有可能建立线程,从而产生隐患了。
  斑竹,加精给分成不,又说了这么多
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马