Java类的最终字段应该总是静态的吗?

2022-09-01 23:59:59

我在网上找不到任何关于此的参考资料。但只是想知道一个类中的最终字段应该总是这样,还是只是一个约定。根据我对它们用途的理解,我觉得这更像是一件合乎逻辑的事情,而不是语言强加的东西。static


答案 1

当然不是。如果它们属于该类,它们必须是静态的;如果它们属于该类的实例,则它们必须是静态的:

public class ImmutablePerson {
    private static final int MAX_LAST_NAME_LENGTH = 255; // belongs to the type
    private final String firstName; // belongs to the instance
    private final String lastName; // belongs to the instance

    public ImmutablePerson(String firstName, String lastName) {
        if (lastName.length() > MAX_LAST_NAME_LENGTH) {
            throw new IllegalArgumentException("last name too large");
        }
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // getters omitted for brevity
}

答案 2

不,绝对不是 - 这不是一个惯例。

static完全不同的东西。 表示该字段与类型相关,而不是与类型的任何特定实例相关。 表示字段在初始分配后无法更改值(必须在类型/实例初始化期间发生)。finalstaticfinal

static final字段通常用于常量 - 而实例字段通常在创建不可变类型时使用。final


推荐