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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 夏添 于 2013-3-7 02:34 编辑

请朋友们看下面的饿汉式单例的代码,其中final的作用是什么呢?
class Student
                {
                        private Student(){}
                        
                        private static final Student s = new Student();//就是这行中的final,请问这个有必要加么?
                        
                        public static Student getInstance()
                        {
                                return s;
                        }
                }
既然已经私有了构造函数和对象,已经达到保证唯一性的目的了,为什么要加个final呢?

为说明问题,我再重复下单例设计模式的特点:
**为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化
**为了其他程序访问到该类对象,须在本类中创建一个该类私有对象
**为了方便其他程序访问到该类对象,可对外提供一个公共访问方式

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

3 个回复

倒序浏览
其实这个位置有无final执行结果都是一样的,只是使用final是为了更安全,保证你这个类的其他方法、其他代码不能对Student  s重新赋值
回复 使用道具 举报
本帖最后由 韩松范 于 2013-3-7 01:37 编辑

为了让代码更严谨。
而且也是为了告诉,其他阅读此代码的人
该变量一旦赋值,将无法改变其值,
其实对于运行结果来说加不加无所谓。

还有值得一提的是通常来说,静态成员变量一般都是final型,
因为静态是共享数据,在使用共享数据时,调用者如果可以改变该值
容易出现问题
举现实中的例子:
本来一个班,共享一个黑版,但是如果不是final类型
那么一个老师在使用时把黑板砸碎,在那挂了一个镜子,其结果不可想像。。。。所以一般共享数据都是不可改变的。
回复 使用道具 举报
final  的增加是为了使结构更加严谨,使s不能指向其他的对象或空。  当然不加也可以  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马