黑马程序员技术交流社区
标题:
关于单例模式(以饿汉为例子)中的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