Java 代码静态最终变量用法

adi*_*adi 0 java static final

我下面有两节课。两者都有一个带有 getter 的变量“回复”。此变量没有设置方法。唯一的区别是在 ClassOne 中,变量是 static final 的。

那么有什么区别,哪个更受欢迎?

public class ClassOne {

    private static final String reply = "Success";
    ..

    public String getReply() {
        return reply;
    }

    // no setter

}
Run Code Online (Sandbox Code Playgroud)

和 2 类

public class ClassTwo {

    private String reply = "Success";
    ..

    public String getReply() {
        return reply;
    }

    // no setter
}
Run Code Online (Sandbox Code Playgroud)

更新1:

我想知道的是,当变量没有setter时,是否应该将变量声明为static final以进行优化?还是没关系?

ass*_*ias 5

应该将变量声明为 static final 以进行优化吗?

  • final 当然,不仅是为了优化,而且是为了清晰,因为它可以使您的对象不可变,这总是一件好事。

  • static 完全改变了该字段的性质并且与 setter 的存在无关:您是否只需要该字段的一个实例,或者您的类的每个实例都需要一个实例?

  • 非静态示例:aPerson有一个名称,它是一个常量(对于给定的 person = per instance),因此您可以使用非静态 final 字段,该字段在创建 new 时仅设置一次Person

        private final String name;
Run Code Online (Sandbox Code Playgroud)
  • 静态示例:每当您没有 a 的名称时Person,您都希望使用默认值 - 这是一个全局常量,在所有没有名称的人之间共享,您可以使用静态 final 字段:
        private static final String NO_NAME = "John Doe";
Run Code Online (Sandbox Code Playgroud)