我想知道使用最终局部变量是否有用。当继承出现时,变量无论如何都不会被覆盖。例如下面的简单代码
public static void main(String args[]) {
final String data = "Hello World!";
System.out.println(data);
}
这个例子很简单,可能不是相关代码,但问题更笼统。我见过很多代码(所有代码都包含在具有最终局部变量的主函数中)是否有声明局部变量的可用性除了它们不能在同一个函数本身中编辑之外,它们是最终的吗?
最佳答案
首先,关于变量被“覆盖”的部分 - final
有两个非常不同的含义。对于类和方法,它是关于继承的;对于变量,它是关于只读的。
final 局部变量有一个重要的“特性”:它们可以在本地(通常是匿名的)内部类中使用。非最终局部变量不能。根据我的经验,这是 final
对局部变量的主要用途。
public void foo() {
final String x = "hello";
String y = "there";
Runnable runnable = new Runnable() {
@Override public void run() {
System.out.println(x); // This is valid
System.out.println(y); // This is not
}
};
runnable.run();
}
请注意,作为一种风格,有些人喜欢使用 final
,即使他们不在本地内部类中捕获变量。我当然会对 final
作为默认值感到满意,但是对于“非最终”使用不同的修饰符,但我发现在任何地方显式添加修饰符太分散注意力了。
关于java - java中final局部变量的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18225572/