在Java中使用最终局部变量
问题内容:
我想知道使用最终局部变量是否有可用性。当继承出现时,变量无论如何都不会被覆盖。例如下面的简单代码
public static void main(String args[]) {
final String data = "Hello World!";
System.out.println(data);
}
这个例子很简单,可能不是一个相关的代码,但是问题比较笼统。我已经看到了很多代码(全部都包含在具有最终局部变量的main函数中)是否有将局部变量声明为final
other的可用性。不能在同一功能中进行编辑?
问题答案:
首先,关于变量被“覆盖”的部分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
默认值,但是对于“ non-
final”使用不同的修饰符,但是我发现在所有地方显式添加修饰符会让人分心。