【Java】内部类调用方法内的局部变量为什么必须加final

Java内部类调用方法内的局部变量时,通常需要该变量被声明为final,因为局部变量在方法栈中,当方法结束变量会消失。加final可以使变量在方法区常量池中保存,确保内部类仍能访问。JDK1.8起,编译器会自动处理这个问题,即使不加final也能编译通过,但尝试修改final变量的值依然会出错。
摘要由CSDN通过智能技术生成

首先要明确一点,如果变量在方法外面,是不用加final的,比如:

class Outer{
    int num=3;
    void method(){
        class Inner{
            void show(){
                System.out.println("show.."+num);
            }
        }
        Inner in=new Inner();
        in.show();
    }
}

class Test{
    public static void main(String[]args){
        //输出show..3
        new Outer().method();
    }
}

在JDK1.8以前,如果变量定义在方法内部,或者作为方法的形参,必须加final,这是为什么呢? 

class Outer{
    void method(){
        //定义在内部,或者在形参
        int num=3;
        class Inner{
            void show(){
                System.out.println("show.."+num);
            }
        }
        Inner in=new Inner();
        in.show();
    }
}

class Test{
    public static void main(String[]args){
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值