在java中,不可能声明性地阻止方法更改非final字段。java中没有“const correction”这样的东西。 如果类字段是非- final ,则可以通过类的任何方法更改它。 请注意 final 在字段和变量上的工作方式与方法和类不同: 一 final 字段或变量是常量。一旦赋值,其值就不能更改。 一 final 方法不能被子类重写。 final 论方法与“恒常性”无关。 一 final 类不能扩展。 final 在课堂上与“恒常性”无关。 java中的选项包括: 使类不可变(即标记其所有字段 final ). 只需仔细编写getter(和其他非变种方法):) 再来一张纸条。即使在字段和变量上,java final 与c++不同 const . 例如: final 变量一经赋值就不能更改,但可以在声明之后进行赋值。例子:
final int value;
if (condition) {
value = 1; // Ok!
} else {
value = 2; // Ok!
}
value = 3; // Compile error: value already assigned.
``` `final` 类字段必须赋值-直接赋值或从构造函数中赋值。但这些字段可以在构造函数中的任何位置赋值。java中没有什么特别的东西像c++的“初始化列表”。
字段/变量/参数声明 `final Object obj` 在java中,它大致相当于c++中对非常量对象的(const-)引用。这意味着,不能重新指定引用,但可以更改引用对象本身。举个例子:
// 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!
2条答案
按热度按时间px9o7tmv1#
在java中,不可能声明性地阻止方法更改非final字段。java中没有“const correction”这样的东西。
如果类字段是非-
final
,则可以通过类的任何方法更改它。请注意
final
在字段和变量上的工作方式与方法和类不同:一
final
字段或变量是常量。一旦赋值,其值就不能更改。一
final
方法不能被子类重写。final
论方法与“恒常性”无关。一
final
类不能扩展。final
在课堂上与“恒常性”无关。java中的选项包括:
使类不可变(即标记其所有字段
final
).只需仔细编写getter(和其他非变种方法):)
再来一张纸条。即使在字段和变量上,java
final
与c++不同const
. 例如:final
变量一经赋值就不能更改,但可以在声明之后进行赋值。例子:// 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!
l7mqbcuq2#
你不能那样做。final方法意味着它不能被重写。