java - java中final局部变量的使用

标签 java final local-variables

我想知道使用最终局部变量是否有用。当继承出现时,变量无论如何都不会被覆盖。例如下面的简单代码

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/

相关文章:

android - 如何使用内容解析器/提供者测试类?

java - 在 Java 的构造函数中声明和设置私有(private)最终成员变量的正确方法?

c - 为什么2个不同的字符串在C中具有相同的地址?

android - View 引用成员变量和局部变量的区别

Java 使用 DOM Reader 获取属性

java - 在 JTable 中自动添加一些文本

java - 如何为phonegap中的应用程序选择第三种技术

java - 在HADOOP映射中使用泛型可减少问题

java - 如何使用 FindBugs 强制分配给方法的参数?

Ruby 局部变量未定义