Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是不是;“私人决赛”;使一个变量成为常数变量?_Java_Constants - Fatal编程技术网

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;