Java 为什么局部内部类对调用的局部变量一定要求为final类型

当局部内部类访问同属于一个方法内的局部变量一定要求这个局部变量为final类型,或者这个局部变量是事实不变的呢?

解释:类new出来的对象是存在于堆当中的,而局部变量是跟着方法走的,存在于栈当中的,这就意味着对象的生命周期是大于堆中的方法的;

局部变量用完了之后就会被内存弹栈回收,若对象想在局部变量被回收完成后再调用局部变量,就需要对之前的局部变量进行拷贝再使用,

假若局部变量不是final型的,当num发生了变化,则会导致对象再次使用num的时候产生数据拷贝错误导致程序运行结果不正确,这是不容许发生的。

所以局部内部类在调用局部变量的时候,一定要求局部变量要为final类型的。

自Java 8开始,IDE允许省略final关键字,但是一定要注意:局部变量仍然要求不可以改变。

public class InnerLocalVariable {
    public void methodOuter(){
        class Inner{//因为你是局部内部类,只能在这个方法块内起作用,所以没有必要也不能写修饰类修饰权限
            final int num=10;
            public void method(){
                System.out.println(num);
            }
        }
        Inner inner=new Inner();
        inner.method();
    }
}

 

上一篇:如果在springboot中设置了 修改了默认页面的指向 使用thymleaf模板 而请求不到静态资源 可能是


下一篇:Java学习