51Testing软件测试论坛

标题: java中局部类调用它所在的局部方法中的变量问题 [打印本页]

作者: 测试积点老人    时间: 2019-2-12 09:15
标题: java中局部类调用它所在的局部方法中的变量问题
  1. package com.review;

  2. public class P205Demo_LocalClass {
  3.     public static void main(String[] args) {
  4.         Outer5 o = new Outer5();
  5.         o.method();
  6.     }
  7. }
  8. class Outer5{
  9.     public void method() {
  10.         int num = 10;
  11.         class Inner5{
  12.             public void print() {
  13.                 System.out.println("局部类只能在所在方法中被调用  ,方法中的num的调用" +num);
  14.             }
  15.         }
  16.         Inner5 i = new Inner5();
  17.         i.print();
  18.     }
  19. }
复制代码
在我看的JAVA教学视频中举了这个例子。
在这个的例子里,在测试类中执行完o.method()方法后,method()方法弹栈,int num这个变量也就消失了。老师说而i这个对象可能还没消失,i.print()已经找不到num了,所以会报错,在视频里老师使用editplus也确实报错了。所以需要在num前面加final延长它的生命周期。
但是我在使用eclipse编译运行上面的代码时并没有并没有报错,运行结果也是正确的。
我的想法是,在method方法弹栈后,i这个对象其实也被回收了,所以才没有报错。
请问各位大佬我这么想对不对,还是因为其他的原因。

作者: puchonghui    时间: 2019-2-12 13:36
这种情况,从jdk 1.8开始不需要加final,和eclipse无关
作者: jingzizx    时间: 2019-2-13 12:50
应该可以的
作者: abcsell    时间: 2019-2-13 15:33
Java版本的原因
作者: 海海豚    时间: 2019-2-13 16:29
和你用的java编译器有关,java8和以后版本不需要。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2