黑马程序员技术交流社区

标题: 方法中的内部类能不能访问方法中的局部变量,为什么? [打印本页]

作者: wzg1015    时间: 2014-10-30 21:03
标题: 方法中的内部类能不能访问方法中的局部变量,为什么?
本帖最后由 wzg1015 于 2014-10-30 23:26 编辑

            这是一道当时的入学考试题, 我有一个问题是,怎么获取那个方法的内部类的类型?            也就是说怎么测试是否可以正常读取呢?  也就说是怎么在外面获取这个内部类的实例对象?主要是这个类在方法内部,也不知道该怎么做。
               
  1. public class Test1 {
  2.      public void test() {
  3.                
  4.                 String str="方法中内部内之前的局部变量";
  5.                 int a=3;
  6.                 /**方法中的内部类**/
  7.                 class Inner {
  8.                         @Override
  9.                         public        String toString() {
  10.                                 return a+""+str;
  11.                         }
  12.                 }
  13.                 String str2="方法之后的局部变量";
  14.         }
  15.         
  16. }
复制代码







作者: sk0806    时间: 2014-10-30 22:11
不能的,要访问,局部变量要声明成final类型的。视频中有提到
因为内部类也是一个类,它存在与堆内存中,只有当该类的引用消失后,内部类才会消失
而方法中的局部变量存在于栈内存中,当调用结束后,就会从内存中消失。所以,,,内部类的生命周期大于
方法中的局部变量的生命周期,内部类可能会访问到已经消失的变量。

不知道理解的是否正确,,,共同学习,互相交流
作者: wzg1015    时间: 2014-10-30 22:16
sk0806 发表于 2014-10-30 22:11
不能的,要访问,局部变量要声明成final类型的。视频中有提到
因为内部类也是一个类,它存在与堆内存中,只 ...

......当时我用的是1.8的java,所以是不需要final就可以的。所说我回答说可以访问,当时确实是可以访问,在方法里面还是可以新建的。  1.5之前就不行,需要final。所以我估计我扣的分就是在这里
作者: sk0806    时间: 2014-10-30 22:32
wzg1015 发表于 2014-10-30 22:16
......当时我用的是1.8的java,所以是不需要final就可以的。所说我回答说可以访问,当时确实是可以访问, ...

恩恩,应该是吧,楼住面试了没?多少分
作者: 杨佳名    时间: 2014-10-30 22:53
wzg1015 发表于 2014-10-30 22:16
......当时我用的是1.8的java,所以是不需要final就可以的。所说我回答说可以访问,当时确实是可以访问, ...

1.8是将final隐式的添加了,并不是说不需要定义成final.重要的是楼主别记错了,如果再遇到类似的问题来论坛提问一下,切忌别想当然的认为.毕老师还说了,千万别买彩票,不会中
作者: wzg1015    时间: 2014-10-30 23:09
杨佳名 发表于 2014-10-30 22:53
1.8是将final隐式的添加了,并不是说不需要定义成final.重要的是楼主别记错了,如果再遇到类似的问题来论坛 ...

原来如此,看来扣分就扣在这上面了.....学习了
作者: MeryStyle    时间: 2014-10-30 23:16
可通过 类名.this.变量名 来访问外部类的final变量




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2