当我们使用 final 关键字时,该变量已被声明为常量,那么使用 static 的必要性是什么?我在我们使用的大多数地方都见过
public static final int nVar = 12
对于常量数据成员。
final
意味着变量不能重新分配给另一个对象/原语。
static
意味着在 JVM 中运行的所有代码共享同一个变量。
final
不能重新分配非静态变量,但每个实例都有自己的副本。
static final
字段(无需创建实例即可访问)通常称为“常量”
final
(非静态)实例变量通常称为“不可变字段”
final意味着,一旦分配了变量的值,就不能修改。
static表示“与类关联”;没有它,变量将与类的每个实例相关联。如果没有,您创建的每个实例都会有一个。static
意味着只要加载类,变量就会保留在内存中
像这样声明一个变量是没有意义的。
public final int nVar = 12;
如果这不是要修改的,为什么每个实例都有一个副本。
Hence, Class constants need to be declared as static final
where as the variables which you want to be immutable on per instance basis, you declare them as final
声明它static
使您无需创建类型的对象即可访问变量。
“最终”标识符意味着变量的值不能更改。
然而,“静态”意味着在它定义的类中有一个变量实例。
所以 final 和 static 是两个不同的东西,但是你经常看到它们一起用来定义一个类的常量。
一个原因可能是您不需要创建类的对象来访问该常量,这就是为什么您应该/可以将其声明为static
. 因为您可以使用类名访问它,因为它是静态的。
检查此代码
public class A{
public static final int aa = 1;
}
public class B{
public final int bb = 1;
}
public class Testing{
SOP(A.aa);// a can be accessed with class name
B b = new B();// where to access the constant bb we need to create class object
SOP(b.bb);
}
静态变量意味着它在类级别可用。只有该变量的一个实例可用于该类的所有对象。静态变量可以修改,但更改将反映在该类的所有对象中。final 变量意味着它的值在初始化后不能改变。带有 static 修饰符的 final 变量意味着该变量在类级别可用。简而言之,它将充当该类的所有对象的常量