Java 原语重新初始化不允许但对象允许创建多次
我有点怀疑什么时候该宣布这门课为期末考试。当我在谷歌上搜索它的时候,我开始知道,出于安全原因,它将帮助full,就像在SO POST的帮助下字符串不可变一样 据我所知,最终变量初始化一次。举个例子: 最终积分i=10 i=11//给出编译时错误 因为Java 原语重新初始化不允许但对象允许创建多次,java,Java,我有点怀疑什么时候该宣布这门课为期末考试。当我在谷歌上搜索它的时候,我开始知道,出于安全原因,它将帮助full,就像在SO POST的帮助下字符串不可变一样 据我所知,最终变量初始化一次。举个例子: 最终积分i=10 i=11//给出编译时错误 因为无法指定最终的局部变量i。它必须为空且不使用复合赋值 但是当我多次创建最后一个类变量时。它允许我这样做。如果它允许我创建多个final类实例,那么我怎么能说它是final类呢 您能给出一些最终类的例子,通过它来满足一些业务逻辑需求吗 若我并没有错,那
无法指定最终的局部变量i。它必须为空且不使用复合赋值
但是当我多次创建最后一个类变量时。它允许我这样做。如果它允许我创建多个final类实例,那么我怎么能说它是final类呢
您能给出一些最终类的例子,通过它来满足一些业务逻辑需求吗
若我并没有错,那个么原语重新初始化是不允许的,但对象允许多次创建 使一门课成为最终课程只会阻止人们扩展它。您仍然可以创建任意数量的实例。
例如,当您想确保类是不可变的,比如字符串是不可变的时,这非常有用。如果可以扩展字符串,则可以添加改变字符串的行为,从而打破不变性。
对于类实例变量,规则与原语相同,如果它们声明为final,则不能重新分配。但是,您仍然可以更改实例的成员 final表示该类不能扩展。您仍然可以创建该类的多个实例。例如:
class ImmutableInt {
int value;
public ImmutableInt( int val ) {
this.value = val;
}
public int getValue() {
return value;
}
// no setter because I don't want people to change it!
}
在上面的例子中,我可以创建许多ImmutableInt实例
ImmutableInt int1 = new ImmutableInt( 10 );
ImmutableInt int2 = new ImmutableInt( 100 );
这两个实例将始终设置为10和100的值
现在让我们假设有人决定能够更改ImmutableInt的值,所以他们扩展ImmutableInt并提供一个setter。好吧,对于那些被认为是不可变的东西来说,这真的没有意义
因此,我向类中添加了final
,表示“没有人可以扩展这个类来打破我的不变性契约。”我还向字段中添加了final
,以便它只能在构造函数中初始化,以后不能更改
final class ImmutableInt {
final int value; // no default value here means it must be set in the constructor
public ImmutableInt( int val ) {
this.value = val;
}
public int getValue() {
return value;
}
// no setter because I don't want people to change it!
}
final在不同地方使用时有不同的含义,因此不要混淆此处提到的概念:
期末课程
最后一个类不能被子类化。这样做是出于以下原因:
安全和效率。因此,许多Java标准
库类是最终类,例如java.lang.System和
java.lang.String
最终变量
最终变量只能初始化一次,可以通过
初始值设定项或赋值语句。不需要这样做
在声明点初始化:这称为“空白”
最后一个“变量”。类的空最终实例变量必须为
在中类的每个构造函数的末尾明确指定
它是被宣布的;同样,必须输入一个空白的最终静态变量
在其所在类的静态初始值设定项中明确指定
被宣布;否则,在这两种情况下都会发生编译时错误
您似乎混淆了final类和final变量。若你们能举一个简短但完整的例子来说明你们的行为,这会很有帮助。@JonSkeet谢谢,我当然会的。我想问一下。你能详细解释一下“令人惊讶的行为”吗?对不起,我不理解你的评论,而且听起来这可能是一个相当模糊的问题。@TBM你能提供不符合你预期的代码吗?谢谢。如果我阻止某个类不可扩展,通过它我实现了什么?我能做些什么来控制?对不起,如果这是一个愚蠢的问题,但我从来没有这样的要求。你能给一些例子或任何参考链接。添加了更多的解释。谢谢。太好了!!非常感谢:)