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);
}
6条答案
按热度按时间uz75evzq1#
final
表示变量不能被重新分配给另一个对象/原语。static
意味着JVM中运行的所有代码共享同一个变量。每个类存在一次,而不是每个对象存在一次。final
非静态变量不能重新分配,但每个示例都有自己的副本。static final
字段(无需创建示例即可访问)通常称为“常量”final
(非静态)示例变量通常称为“不可变字段”s5a0g9ez2#
final表示变量的值一旦赋值就不能修改。
static表示与类关联;如果没有它,变量将与类的每个示例相关联。如果没有,您将为创建每个示例创建一个。
static
意味着只要类被加载,变量就将保留在内存中这样声明一个变量是没有意义的。
如果这不意味着要修改,为什么每个示例都有一个副本。
因此,Class constants 需要声明为
static final
,而对于希望在每个示例基础上 * 不可变 * 的变量,则声明为final
iyzzxitl3#
声明它
static
使您能够访问变量,而无需创建类型的对象。yv5phkfx4#
“final”标识符意味着变量的值不能更改。
然而,“静态”意味着在它被定义的类中存在变量的一个示例。
所以final和static是两个不同的东西,但是你经常看到它们一起用来定义一个类的常量。
ycl3bljg5#
一个原因可能是你不需要创建一个类的对象来访问这个常量,这就是为什么你应该/可以声明它为
static
。因为你可以用类名访问它,因为它是静态的。检查这个代码
wwwo4jvm6#
静态变量意味着它在类级别可用。对于该类的所有对象,只有该变量的一个示例可用。静态变量可以修改,但更改将反映在该类的所有对象中。final变量意味着它的值在初始化后不能改变。一个带有static修饰符的final变量意味着这个变量在类级别上是可用的。简而言之,它将作为该类的所有对象的常量