对于一般用作声明常量的修饰符:final,应用在单例模式中我有个疑问,代码如下:
public class Singleton
{
private static final singleton=new Singleton();//为什么要用final呢?去掉行不行呢?
private Singleton
{}
public static Singleton newInstance()
{
return singleton
}
}

解决方案 »

  1.   

    final 的最大好处是防止意外的发生了这种替换,毕竟软件有一定生命周期,而且不是永远只有你去维护它,就是是你自己,过个2年怕是也不记得当时情景了。
      

  2.   

    去掉不是不行,但加是为保险起见
    因为newInstance方法返回的是一个Singleton对象
    加上final就声明了singleton永远为一个Singleton对象,不能改变
      

  3.   

    仅就变量层面讨论的话,还有几个好处:
    1、保证只被赋值一次(也即定义时可以不初始值,而是指运行过程中再进行初始化);
    2、可以让匿名类直接进行引用;
    3、JVM可以对final变量的使用进行优化(指提升速度层面的,因为不可变,所以直接进入高速缓存区,且不用考虑线程间可见性等问题);
      

  4.   

    java中的final修饰变量没有c/c++中的const关键字用的多,可以将函数的形参设为final防止函数体修改,c/c++经常用const这么干
      

  5.   

    http://baike.baidu.com/view/1859857.htm
      

  6.   

    意外总是发生,你能保证自己不会一不小心给这个单利的类重新设置了一个新值???finla就是用来从语言层面保证这个的!他只能被赋值一次。
      

  7.   

    优秀的Java程序员有良好好习惯:经常讲类的成员或相关方法设置为private,另一个就是经常性地使用final,时间长了你就知道这个习惯对你的帮助有多大啦