黑马程序员技术交流社区

标题: 我头疼很久的问题(小白一枚求解答) [打印本页]

作者: axing110    时间: 2014-10-20 22:39
标题: 我头疼很久的问题(小白一枚求解答)
这个问题困扰我很久了,开始我以为是老师讲错了,后来在百度上发现说法都一样那是我错了吗?是关于局部内部类访问成员变量时,为什么必须申明为final。但是我怎么操作确都可以,是我的问题么?附上图片一张
作者: zhengzhaozhao    时间: 2014-10-20 22:48
图不完整啊,看不见,,
作者: axing110    时间: 2014-10-20 22:56
  1. class aaaa
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new name().method(7);
  6.         }
  7. }
  8. class name
  9. {

  10.         void method(int a)
  11.         {
  12.                 int y=4;
  13.                 class Inner
  14.                 {
  15.                         void function()
  16.                         {
  17.                                 System.out.println(y+"::"+a);
  18.                         }
  19.                        
  20.                 }
  21.                 new Inner().function();
  22.         }
  23. }
复制代码

作者: axing110    时间: 2014-10-20 22:57
这个事代码你看看撒
作者: 森屿北巷    时间: 2014-10-20 23:05
不是楼主的问题,也不是老师讲的问题。而是JDK。刚开始练习好像都会这样http://bbs.itheima.com/forum.php?mod=viewthread&tid=147900
作者: axing110    时间: 2014-10-20 23:10
感谢终于解决了,我说吗原来是新特性啊感谢
作者: 踏云    时间: 2014-10-20 23:21
我从两者的生命周期说起吧函数运行是在内存栈中运行的,局部变量生命周期是从定义开始到出了作用域,一出作用域就消失
对象的生命周期是从创建开始到对象被垃圾回收器回收。

当函数运行到局部变量和局部类时创建了局部变量和局部类的对象。局部类的对象引用了局部变量。
如果局部变量不是final修饰的,那当函数运行完时,局部变量就要消失,而局部类的对象还不会消失(要垃圾回收器回收)
所以这就矛盾了。

sun是这样解决这个问题的,他将变量修饰成final,当局部类调用这个变量的时候,其实不是在调用这个变量,只是复制了这个变量的一个引用,

不知道这样解释清不清楚。


作者: mudao    时间: 2014-10-20 23:32
1.8的新特性吗?学习了。
作者: axing110    时间: 2014-10-21 08:55
恩感谢,我懂了呵呵谢谢
作者: axing110    时间: 2014-10-21 13:54
:)感谢版主感谢黑马
作者: mingtianrsm    时间: 2014-10-21 14:15
我记得老师讲的是局部变量,不是成员变量,可能是我基础了吧~
作者: qq8921310    时间: 2014-10-21 16:29
这个问题我也纠结过,你尝试这把值改变一下就知道,其实还是加的有final的。好像隐藏了。就像interface前面的前缀一样。
作者: 面具猴    时间: 2014-10-21 17:39
哇,原来如此啊。。。。学习了

作者: Paul_Chang    时间: 2014-10-22 08:17
有人问了的说
作者: axing110    时间: 2014-10-22 08:49
呵呵黑马提问论坛真不错,基本问题提问了马上又解答,感谢黑马!!!顶顶顶
作者: HM2014nuli    时间: 2014-10-22 08:52
1.8的新特性。。。。。
作者: axing110    时间: 2014-10-22 08:53
是的但是原理还是一样,只不过不老师讲的时候还没有加入这个。呵呵感谢同仁




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