今天看了一下java设计模式的单例模式,在懒汉式中一开始声明的类的实例化对象为什么只用private static 声明了而没有加final关键字?在饿汉式中声明实例是使用了private static final修饰
声明为final的变量,必须在类加载完成时已经赋值, 是什么意思呢?
就是,如果你是final非static成员,必须在构造器、代码块、或者直接定义赋值;
如果是final static 成员变量,必须直接赋值 或者在 静态代码块中赋值。
然而直接赋值 或 静态代码块中赋值 就变成饿汉模式了,
所以懒汉模式中,不能用final修饰
十分感谢,明白了
不错
不一定需要final关键字吧。单例设计模式饿汉还是懒汉之分在于调用对象之前已经初始化还是调用之后再初始化。
我知道这个,我的疑问是既然区别只是在声明类的实例化对象的时机不同,为什么声明的时候修饰的关键字不一样
@宿舍老五啊: 这个我感觉得看需求吧。需求有时候要求得那样做。只是使适用情况不一样吧
单例模式和final有关系么?我之前没用过啊
用饿汉式实现时,
private static final Singleton instance = new Singleton();
在声明时需要直接创建实例。
用懒汉式实现时,
private static Singleton instance;
声明时不需要直接创建对象,但这两种在声明的时候为什么一个用了final修饰一个没用?
@宿舍老五啊: 两个使用的方式不一样吧,加final的不能再更改,但是近来就new了对象,而第二个是用的时候再去判断是否有对象,有的话就返回,没有再new一个出来的