final
为对象 声明关键字有什么用?例如:
final Object obj = new myclass();
使用“ final”关键字可使您声明的变量不变。最初分配后,将无法重新分配。
但是,这不一定意味着变量引用的实例状态是不可变的,仅引用本身是不可变的。
在变量上使用“
final”关键字有几个原因。一种是优化,通过将变量声明为final来允许值被记忆。
使用最终变量的另一种情况是方法中的内部类需要访问声明方法中的变量。以下代码说明了这一点:
public void foo() {
final int x = 1;
new Runnable() {
@Override
public void run() {
int i = x;
}
};
}
如果未将x声明为“最终”,则代码将导致编译错误。需要成为“最终”的确切原因是因为新的类实例可以超过方法调用的寿命,因此需要自己的x实例。为了避免在同一范围内具有可变变量的多个副本,必须将变量声明为final,以便不能对其进行更改。
一些程序员还提倡使用“ final”来防止意外将变量重新分配到不应分配的位置。一种“最佳实践”类型规则。
问题内容: 这个问题已经在这里有了答案 : 10年前关闭。 可能重复: 何时使用最终版 为对象 声明关键字有什么用?例如: 问题答案: 使用“ final”关键字可使您声明的变量不变。最初分配后,将无法重新分配。 但是,这不一定意味着变量引用的实例状态是不可变的,仅引用本身是不可变的。 在变量上使用“ final”关键字有几个原因。一种是优化,通过将变量声明为final来允许值被记忆。 使用最终变
问题内容: 可以在Java中将接口声明为final吗? 问题答案: 接口是100%抽象的,创建接口实例的唯一方法是实例化实现该接口的类。允许接口完全没有意义。 编辑 问题不像我最初想到的那样彻底。最终接口是不能由其他接口扩展但可以表面上实现的接口。 我可以想到最终类和最终接口之间的区别。扩展类可能会损害其完整性,因为它包含某些状态。扩展接口只是增加了操作,并且不会损害实现的完整性,因为接口本身是无
问题内容: 任何人都可以告诉我在Java上下文中以下行的含义是什么: 除非变量是不可变的,否则仍然可以对其进行操作 据我所知,通过将任何变量声明为final,就无法再次对其进行更改,那么上一行中 不可变 一词的含义是什么? 问题答案: 这意味着,如果您的最终变量是引用类型(即不是像int这样的基元),则只有引用是不能更改的。不能使它引用不同的对象,但是如果类允许,它所引用的对象的字段仍可以更改。例
问题内容: 将变量声明为的区别是什么 要么 如果我只希望变量是局部的,并且是常量(以后不能更改)? 谢谢 问题答案: 仅仅具有预期的效果。 声明static使其成为一个类变量,使其可以使用类名进行访问
问题内容: 让我们从一个简单的测试用例开始: 任何人都在乎猜测什么将作为输出打印(在底部显示,以免立即破坏惊喜)。 问题是: 为什么原始和包装的整数表现不同? 为什么反射访问与直接访问返回不同的结果? 最困扰我的人-为什么String表现得像原始的而不是像? 结果(java 1.5): 问题答案: 内联编译时常量(在javac编译时)。参见JLS,尤其是15.28定义了常量表达式,而13.4.9讨
问题内容: 我有一个很简单的问题: 我想要一个Java类,该类提供一个公共静态方法,该方法可以执行某些操作。这只是出于封装目的(将所有重要的内容都放在一个单独的类中)… 此类不应被实例化或扩展。那让我写道: (尽管我知道,这是禁止的)。 我也知道,我可以使此类完全为final,并在将其私有化时覆盖标准构造函数。 但这在我看来更像是一种“解决方法”,应该更可能由最终的抽象类完成… 而且我讨厌解决方法