Java 是不是;“私人决赛”;使一个变量成为常数变量?
它必须是“私有静态最终版”而不是“私有最终版”Java 是不是;“私人决赛”;使一个变量成为常数变量?,java,constants,Java,Constants,它必须是“私有静态最终版”而不是“私有最终版”static与MAX是final这一事实无关。它只是说明定义该常量的类的每个对象是否“必须有自己的常量MAX”(因为它是一个常量,所以不会真正有用),或者它是否属于整个类。static表示该变量是类的属性,而不是对象的属性。对于常量,可能需要将其定义为静态,因为它们通常不会在给定类的不同对象之间更改/变形其值-最好创建一个类级别的属性,而不是在具有相同值的类的不同对象之间相乘。 您可以节省内存,并且不必创建对象来访问其值 以下是有关静态的详细信息:
static
与MAX
是final
这一事实无关。它只是说明定义该常量的类的每个对象是否“必须有自己的常量MAX
”(因为它是一个常量,所以不会真正有用),或者它是否属于整个类。static
表示该变量是类的属性,而不是对象的属性。对于常量,可能需要将其定义为静态,因为它们通常不会在给定类的不同对象之间更改/变形其值-最好创建一个类级别的属性,而不是在具有相同值的类的不同对象之间相乘。
您可以节省内存,并且不必创建对象来访问其值
以下是有关静态的详细信息:
这是关于如何定义常数的问题的答案
关键字private指的是字段/成员(变量)的可见性,final表示一旦定义,将永远不会更改其值,static表示实际上不需要对象来使用此值
结论:
private final int
可以是对象的字段/成员,但不能从外部访问,因为它是私有的。因此,永远不能将其用作常数
如果您这样做:
- 公共最终int MAX然后可以通过对象属性访问MAX,例如
foo.MAX
- 私有final int MAX然后可以通过getter访问MAX,例如
foo.getMax()
- 公共静态final int MAX然后可以通过类eg Integer.MAX访问MAX
- 私有静态final int MAX然后MAX可以在类eg Integer.MAX中进行内部访问
final
单独使其保持不变,static
使其对所属类的每个实例使用相同的分配空间。在Java中定义常量时,您应该同时使用这两个常量(这可能是您遇到的困惑)。为什么要同时使用它们来定义常量?因为这样您就不必创建它们定义在其中的类的实例,如果您创建实例,它们将填充相同的分配空间,因此您不会浪费内存。final
单独使其成为常量变量。使其成为常量,使其成为static
使其成为类级别(每个实例都有自己的MAX
,或者所有实例都应该共享一个MAX
,这有意义吗)。对象级别的“常量”应称为不可变对象属性,该属性需要在对象构造时初始化,因此它实际上不是一个常量。请参见此处作为示例-它们都是静态的:
private final int MAX = 100;