首页 > Java开发 > “Cannot refer to a non-final variable * inside an inner class defined in a different method”错误解析

“Cannot refer to a non-final variable * inside an inner class defined in a different method”错误解析

在使用Java局部内部类或者匿名内部类时,若该类调用了所在方法的局部变量,则该局部变量必须使用final关键字来修饰,否则将会出现编译错误“Cannot refer to a non-final variable * inside an inner class defined in a different method” 下面通过一段代码来演示和分析原因。

[java][/java] view plaincopy

  1. public class Example {
  2.     public static void main(String args[]) {
  3.         doSomething();
  4.     }
  5.     private static void doSomething() {
  6.         final String str1 = "Hello";
  7.         // String str2 = "World!";
  8.         // 创建一个方法里的局部内部类
  9.         class Test {
  10.             public void out() {
  11.                 System.out.println(str1);
  12.                 // System.out.println(str2);
  13.             }
  14.         }
  15.         Test test = new Test();
  16.         test.out();
  17.     }
  18. }

上面代码若去掉第9行和第14行的注释符号,则第14行就会给出“Cannot refer to a non-final variable * inside an inner class defined in a different method”这样的编译错误。原因如下:在方法中定义的变量时局部变量,当方法返回时,局部变量(str1,str2)对应的栈就被回收了,当方法内部类去访问局部变量时就会发生错误。当在变量前加上final时,变量就不在是真的变量了,成了常量,这样在编译器进行编译时(即编译阶段)就会用变量的值来代替变量,这样就不会出现变量清除后,再访问变量的错误。


本文固定链接: http://www.devba.com/index.php/archives/1416.html | 开发吧

报歉!评论已关闭.