A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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. }
复制代码






评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

6 个回复

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

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

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

恩恩,应该是吧,楼住面试了没?多少分
回复 使用道具 举报
wzg1015 发表于 2014-10-30 22:16
......当时我用的是1.8的java,所以是不需要final就可以的。所说我回答说可以访问,当时确实是可以访问, ...

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

原来如此,看来扣分就扣在这上面了.....学习了
回复 使用道具 举报
MeryStyle 来自手机 中级黑马 2014-10-30 23:16:46
7#
可通过 类名.this.变量名 来访问外部类的final变量
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马