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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© --_.Is’攸稀 中级黑马   /  2013-12-9 13:42  /  867 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 --_.Is’攸稀 于 2013-12-9 15:11 编辑

  1. public class Singleton1
  2. {
  3.      private Singleton1() {}
  4.      private static final Singleton1 single = new Singleton1();
  5.      public static Singleton1 getInstance()
  6.     {
  7.              return single;
  8.        }
  9. }
复制代码

今天重温了下单例--饿汉式,有些不理解为什么这里要把成员single用final修饰,如果是安全起见让它改变不了,private私有化就得了,就访问不了了。还有为什么要那也要static静态修饰?

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

5 个回复

倒序浏览
首先你已经将构造函数私有化了,只有对外提供一个可以得到这个类的实例对象的静态方法,而静态方法需要访问你所定义的single ,所以single 需要被静态修饰,私有化是为了外界不能直接访问,final是表示这是一个常量,不能再对其赋值了,保证对象实例唯一性。所以这样定义是必不可少的

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
static修饰这是必须的 不然编译不过 因为其被公共方法调用,而final则不是必须的 不写结果也一样,只是为了让代码更严谨些吧 说明它是一个常量,一眼看出它终生只有一个量 仅此而已 不写也没人会说你错的
回复 使用道具 举报
首选,定义为final的确是安全起见让它改变不了,也保证其唯一性。
其次:你先复习下static的作用吧
static作用:如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象,也就是达到,饿汉式的要求。你可以将方法和变量都声明为static,static成员的最常见的例子是main( ) ,因为在程序开始执行时必须调用main() ,所以它被声明为static,这样你理解了吧

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
┾——黑马 发表于 2013-12-9 13:51
首先你已经将构造函数私有化了,只有对外提供一个可以得到这个类的实例对象的静态方法,而静态方法需要访问 ...

哦,想起了静态方法只能访问类中的静态成员变量了,感觉没有final也可以,反正都不能被访问就不会被改掉。
回复 使用道具 举报
--_.Is’攸稀 发表于 2013-12-9 14:14
哦,想起了静态方法只能访问类中的静态成员变量了,感觉没有final也可以,反正都不能被访问就不会被改掉 ...

但是这样考虑更严谨啊,有时候前辈们这样做还是有他们的道理的...嘿嘿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马