使用最终实例变量,其值在编译时已知

Car*_*lco 1 java static final

有没有什么情况下使用最终实例变量而不是静态最终实例变量是有意义的,当你在编译时已经知道它的值时它对所有实例都是一样的?

我的意思是,尽管这种初始化在语法上是有效的:

class Test {

    final int size = 3;

    ...
}
Run Code Online (Sandbox Code Playgroud)

它将为每个实例创建一个副本,所以问题是,是否有任何情况下,这样做是有意义的,而不是:

class Test {

    static final int size = 3;

    ...
}
Run Code Online (Sandbox Code Playgroud)

并为所有实例制作一份副本.

谢谢

Ram*_*oza 5

最终但非静态变量的目的是具有对象范围的常量.它应该在构造函数中初始化.

class A {
    final int a;

    A(int a) {
        this.a = a;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在声明中初始化变量,最好使用static关键字.