在 C++ 中我们做了一个常量方法,所以它不能改变类成员的值,但是我怎么能在 Java 中做到呢?我尝试了 final 方法声明,它等同于 C++ 中的 consts,但 final 方法是另一回事。我想做一个getter方法,所以它不能改变值,只能读取它。就像一个只读方法。
在 Java 中,不可能以声明方式阻止方法更改非 final 字段。Java 中没有“常量正确性”这样的东西。
如果类字段是 non- final,则可以通过类的任何方法更改它。
请注意,final字段和变量与方法和类的工作方式不同:
final字段或变量是一个常数。它的值一旦分配就不能更改。final方法不能被子类覆盖。finalon 方法与“constness”无关。final类不能扩展。final在课堂上与“恒定性”无关。您在 Java 中的选项是:
final)。再一记。即使在字段和变量上,Java 的也final不同于 C++ 的const. 例如:
final变量一旦赋值就不能改变,但你可以在声明之后赋值。例子:
final int value;
if (condition) {
value = 1; // Ok!
} else {
value = 2; // Ok!
}
value = 3; // Compile error: value already assigned.
Run Code Online (Sandbox Code Playgroud)
final必须分配类字段 - 直接分配或从构造函数内分配。但是这些字段可以在构造函数中的任何地方分配。Java 中没有像 C++ 的“初始化列表”这样的特殊东西。
final Object objJava 中的字段/变量/参数声明大致相当于C++ 中对非常量对象的(const-) 引用。这意味着,您不能重新分配 reference,但您可以更改引用的对象本身。一个例子:
// Note that (obsolete) Date class is mutable in Java.
final Date myDate = new Date();
myDate = new Date(); // Compilation error: can't reassign a final reference!
myDate.setTime(4711); // Ok, mutating referenced object is allowed!
Run Code Online (Sandbox Code Playgroud)