首页 新闻 会员 周边 捐助

java设计模式单例模式final关键字的问题

0
[已解决问题] 解决于 2017-07-14 08:39

今天看了一下java设计模式的单例模式,在懒汉式中一开始声明的类的实例化对象为什么只用private static 声明了而没有加final关键字?在饿汉式中声明实例是使用了private static final修饰

宿舍老五啊的主页 宿舍老五啊 | 初学一级 | 园豆:86
提问于:2017-07-13 12:23
< >
分享
最佳答案
1

声明为final的变量,必须在类加载完成时已经赋值, 是什么意思呢?

就是,如果你是final非static成员,必须在构造器、代码块、或者直接定义赋值

如果是final static 成员变量,必须直接赋值 或者在 静态代码块中赋值

然而直接赋值 或 静态代码块中赋值 就变成饿汉模式了,

所以懒汉模式中,不能用final修饰

奖励园豆:5
苍枫露雨 | 小虾三级 |园豆:1027 | 2017-07-13 17:56

十分感谢,明白了

宿舍老五啊 | 园豆:86 (初学一级) | 2017-07-14 08:38

不错

aiaigerui | 园豆:202 (菜鸟二级) | 2018-11-16 09:36
其他回答(2)
0

不一定需要final关键字吧。单例设计模式饿汉还是懒汉之分在于调用对象之前已经初始化还是调用之后再初始化。

fcyh | 园豆:568 (小虾三级) | 2017-07-13 12:42

我知道这个,我的疑问是既然区别只是在声明类的实例化对象的时机不同,为什么声明的时候修饰的关键字不一样

支持(0) 反对(0) 宿舍老五啊 | 园豆:86 (初学一级) | 2017-07-13 13:17

@宿舍老五啊: 这个我感觉得看需求吧。需求有时候要求得那样做。只是使适用情况不一样吧

支持(0) 反对(0) fcyh | 园豆:568 (小虾三级) | 2017-07-13 13:36
0

单例模式和final有关系么?我之前没用过啊

大宇007 | 园豆:331 (菜鸟二级) | 2017-07-13 14:04

用饿汉式实现时,

private static final Singleton instance = new Singleton();

在声明时需要直接创建实例。

用懒汉式实现时,

private static Singleton instance;

声明时不需要直接创建对象,但这两种在声明的时候为什么一个用了final修饰一个没用?

支持(0) 反对(0) 宿舍老五啊 | 园豆:86 (初学一级) | 2017-07-13 14:14

@宿舍老五啊: 两个使用的方式不一样吧,加final的不能再更改,但是近来就new了对象,而第二个是用的时候再去判断是否有对象,有的话就返回,没有再new一个出来的

支持(0) 反对(1) 大宇007 | 园豆:331 (菜鸟二级) | 2017-07-13 14:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册