黑马程序员技术交流社区

标题: 关于单例模式(以饿汉为例子)中的final的思考 [打印本页]

作者: wahaha    时间: 2013-3-6 15:04
标题: 关于单例模式(以饿汉为例子)中的final的思考
本帖最后由 夏添 于 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呢?

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


作者: 邹学良    时间: 2013-3-6 15:13
其实这个位置有无final执行结果都是一样的,只是使用final是为了更安全,保证你这个类的其他方法、其他代码不能对Student  s重新赋值
作者: 移动小坦克    时间: 2013-3-7 01:35
本帖最后由 韩松范 于 2013-3-7 01:37 编辑

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

还有值得一提的是通常来说,静态成员变量一般都是final型,
因为静态是共享数据,在使用共享数据时,调用者如果可以改变该值
容易出现问题
举现实中的例子:
本来一个班,共享一个黑版,但是如果不是final类型
那么一个老师在使用时把黑板砸碎,在那挂了一个镜子,其结果不可想像。。。。所以一般共享数据都是不可改变的。
作者: amen0205    时间: 2013-3-7 02:30
final  的增加是为了使结构更加严谨,使s不能指向其他的对象或空。  当然不加也可以  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2