3

有谁知道这两种方法的区别?

public class SingleTone {

    private static final instance = new SingleTone();

    private SingleTone() {
    }
    public [static] SingleTone getinstance() {
        return instance;
    }
} 

public class SingleTone {

    private static instance = new SingleTone();

    private SingleTone() {
    }
    public  [static] SingleTone getinstance() {
        return instance;
    }
} 

我知道最终的静态变量是线程安全的,但是我找不到非最终变量的任何问题。(注意:我正在寻找最终静态变量与非最终静态变量的区别,所以请不要建议如何实现单例设计模式。我知道有一种枚举方法。)

编辑:我错过了方法上的静态关键字,现在它已修复!

4

3 回答 3

2

除了可能的编译器优化外,没有太大区别。无论哪种情况,因为它是私有的,没有设置器,所以没有什么可以修改它,所以它是否存在并不特别重要final。但是,在这两种情况下,您的getInstance()方法都需要声明static

于 2013-03-18T19:32:50.553 回答
2

final修饰符意味着不会为该字段分配任何其他内容。也就是说,您不能在其上使用等号 (=) 运算符。虽然static修饰符意味着变量是类的一部分而不是实例的一部分,但无论您有多少实例,都只会有其中一个。

然后第一种方法使引用线程安全,因为我们知道初始化后值不会改变。但是,如果我们有一个最终结构,我们需要确保内容也是同步的。有关更多信息,请参阅此问题

于 2013-03-18T19:32:53.763 回答
0

final 在您的情况下不会给出任何特殊的性能改进。

我们使用 final 进行清晰的设计方法。根据 Josh Bloch 的“设计继承或禁止它”的经验法则,通常应该更频繁地对类使用 final,而不仅仅是这种情况。

于 2013-03-18T19:41:14.117 回答