我下面有两节课。两者都有一个带有 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以进行优化?还是没关系?
应该将变量声明为 static final 以进行优化吗?
final 当然,不仅是为了优化,而且是为了清晰,因为它可以使您的对象不可变,这总是一件好事。
static 完全改变了该字段的性质并且与 setter 的存在无关:您是否只需要该字段的一个实例,或者您的类的每个实例都需要一个实例?
非静态示例:aPerson有一个名称,它是一个常量(对于给定的 person = per instance),因此您可以使用非静态 final 字段,该字段在创建 new 时仅设置一次Person:
        private final String name;
Run Code Online (Sandbox Code Playgroud)
Person,您都希望使用默认值 - 这是一个全局常量,在所有没有名称的人之间共享,您可以使用静态 final 字段:        private static final String NO_NAME = "John Doe";
Run Code Online (Sandbox Code Playgroud)