欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

局部内部类访问局部变量的问题

程序员文章站 2022-04-11 18:45:03
...

局部内部类访问局部变量的问题

class Demo03_InnerClass{
    public static void main(String[] args){
        Outer o = new Outer();
        o.method();
    }
}

class Outer{
    public void method(){
        //错误:从内部类中访问本地变量num,需要被声明为最终类型
        //int num = 10;
        final int num = 10;
        class Inner {
            public void print(){
                System.out.println(num);
            }
        }

        Inner i = new Inner();
        i.print();
    }

    //局部内部类,只能在其所在的方法中访问
    //错误:找不到符号
    //public void run(){
    //  Inner i = new Inner();
    //  i.print();
    //}
}
  • A:案例演示

    • 局部内部类访问局部变量必须用final修饰
    • 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
      因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用。

      但是jdk1.8取消了这个事情,所以我认为这是个bug

局部内部类访问局部变量的问题