1

当我们使用 final 关键字时,该变量已被声明为常量,那么使用 static 的必要性是什么?我在我们使用的大多数地方都见过

public static final int nVar = 12

对于常量数据成员。

4

6 回答 6

4

final意味着变量不能重新分配给另一个对象/原语。

static意味着在 JVM 中运行的所有代码共享同一个变量。

final不能重新分配非静态变量,但每个实例都有自己的副本。

static final字段(无需创建实例即可访问)通常称为“常量”

final(非静态)实例变量通常称为“不可变字段”

于 2013-01-15T06:37:50.137 回答
3

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

于 2013-01-15T06:39:56.267 回答
2

声明它static使您无需创建类型的对象即可访问变量。

于 2013-01-15T06:32:00.770 回答
1

“最终”标识符意味着变量的值不能更改。

然而,“静态”意味着在它定义的类中有一个变量实例。

所以 final 和 static 是两个不同的东西,但是你经常看到它们一起用来定义一个类的常量。

于 2013-01-15T06:32:13.163 回答
1

一个原因可能是您不需要创建类的对象来访问该常量,这就是为什么您应该/可以将其声明为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);
}
于 2013-01-15T06:35:38.113 回答
0

静态变量意味着它在类级别可用。只有该变量的一个实例可用于该类的所有对象。静态变量可以修改,但更改将反映在该类的所有对象中。final 变量意味着它的值在初始化后不能改变。带有 static 修饰符的 final 变量意味着该变量在类级别可用。简而言之,它将充当该类的所有对象的常量

于 2013-01-15T06:36:06.520 回答