数十载人世游 2019-02-12 07:27 采纳率: 50%
浏览 1173

java中局部类调用它所在的局部方法中的变量问题

package com.review;

public class P205Demo_LocalClass {
    public static void main(String[] args) {
        Outer5 o = new Outer5();
        o.method(); 
    }
}
class Outer5{
    public void method() {
        int num = 10;
        class Inner5{
            public void print() {
                System.out.println("局部类只能在所在方法中被调用  ,方法中的num的调用" +num);
            }
        }
        Inner5 i = new Inner5();
        i.print();
    }
}

在我看的JAVA教学视频中举了这个例子。
在这个的例子里,在测试类中执行完o.method()方法后,method()方法弹栈,int num这个变量也就消失了。老师说而i这个对象可能还没消失,i.print()已经找不到num了,所以会报错,在视频里老师使用editplus也确实报错了。所以需要在num前面加final延长它的生命周期。
但是我在使用eclipse编译运行上面的代码时并没有并没有报错,运行结果也是正确的。
我的想法是,在method方法弹栈后,i这个对象其实也被回收了,所以才没有报错。
请问各位大佬我这么想对不对,还是因为其他的原因。

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-02-12 12:03
    关注

    和你用的java编译器有关,java8和以后版本不需要。

    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能