黑马程序员技术交流社区
标题:
我头疼很久的问题(小白一枚求解答)
[打印本页]
作者:
axing110
时间:
2014-10-20 22:39
标题:
我头疼很久的问题(小白一枚求解答)
1234.png
(126.96 KB, 下载次数: 25)
下载附件
2014-10-20 22:39 上传
这个问题困扰我很久了,开始我以为是老师讲错了,后来在百度上发现说法都一样那是我错了吗?是关于局部内部类访问成员变量时,为什么必须申明为final。但是我怎么操作确都可以,是我的问题么?附上图片一张
作者:
zhengzhaozhao
时间:
2014-10-20 22:48
图不完整啊,看不见,,
作者:
axing110
时间:
2014-10-20 22:56
class aaaa
{
public static void main(String[] args)
{
new name().method(7);
}
}
class name
{
void method(int a)
{
int y=4;
class Inner
{
void function()
{
System.out.println(y+"::"+a);
}
}
new Inner().function();
}
}
复制代码
作者:
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