• 方法中内部类访问方法的局部变量,该变量必须要用final修饰


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

    public class Example {  
      
        public static void main(String args[]) {  
            doSomething();  
        }  
      
        private static void doSomething() {  
            final String str1 = "Hello";  
            // String str2 = "World!";  
            // 创建一个方法里的局部内部类  
            class Test {  
                public void out() {  
                    System.out.println(str1);  
                    // System.out.println(str2);  
                }  
            }  
            Test test = new Test();  
            test.out();  
      
        }  
      
    } 

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

  • 相关阅读:
    Java中的集合类
    Java中的包装类
    Java中的多线程总结(转)
    Java开发中的23种设计模式详解 (转)
    Java中异常处理和设计
    Jmeter的ForEach控制器
    Jmeter事务控制器
    Jmeter下线程顺序启动
    Jmeter跨线程调用参数
    Jmeter使用Python
  • 原文地址:https://www.cnblogs.com/a591378955/p/8080721.html
Copyright © 2020-2023  润新知