局部内部类能访问 Java 中的局部 final 变量吗?


是的,我们能使用**局部 final 变量**访问**局部内部类**,因为 final 变量存储在**堆**中,并且能存活于**局部内部类**对象存活的任意时间。

局部内部类

  • 局部内部类实例**能作为参数传递,并从方法中检索,且它在有效的范围内可用。
  • 局部内部类**的唯一限制是局部参数只能在被定义为**final**时才能执行。
  • 执行局部参数的方法能在方法执行后调用,其中声明了**局部内部类**。因此,局部参数将不再保留其值。
  • 必须在创建**局部内部类对象**前修复值。如果需要,非 final 变量可以复制到 final 变量中,该 final 变量随后由**局部内部类**执行。

示例

实时演示

class MainClassTest {
   private int x = 10;
   public void sampleMethod() {
      final int y = 20;
      class MethodLocalInnerClassTest {
         public void accessMainClassVar() {
            System.out.println(x);
            // accessing the final variable
            System.out.println(c);
         }
      }
      MainClassTest mainTest = new MethodLocalInnerClassTest();
      mainTest.accessMainClassVar();
   }
}

// Test.java
public class Test {
   public static void main(String args[]) {
      MainClassTest test = new MainClassTest();
      test.sampleMethod();
   }
}

输出

10
20

更新于: 2020 年 6 月 29 日

730 次浏览

开启你的职业生涯

完成课程取得认证

开始
广告