在以下示例中,变量 b
被声明为 final
,但不是 static
。这意味着它是一个常量实例变量。但是,由于它是常量,因此任何 Passenger
对象都无法更改其值。那么,将其声明为static
并使其成为类变量,这样所有实例化对象都只使用一份副本不是更好吗?
class Passenger {
int a;
final int b = 0;
void drive() {
System.out.println("I'm driving!");
}
}
最佳答案
final
但非static
变量的目的是拥有一个对象范围的常量。它应该在构造函数中初始化:
class Passenger {
final int b;
Passenger(int b) {
this.b = b;
}
}
如果您始终将常量文字值 (0
) 分配给 final
变量,则没有多大意义。首选使用 static
,这样您就只有 b
的单个副本:
static final int b = 0;
顺便说一句,我不认为拥有默认访问修饰符是您的意图。
关于java - 最终(常量)实例(非静态)变量的行为与类(静态)变量类似吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9699524/