黑马程序员技术交流社区
标题:
关于内部类的一个问题
[打印本页]
作者:
OnlyStyle
时间:
2014-10-31 22:44
标题:
关于内部类的一个问题
大家都知道,当定义在方法上的内部类访问方法的局部变量时,被访问的变量需要用final修饰,一直好奇为什么要这样?有人能解答么?
作者:
javaAndroid
时间:
2014-10-31 22:49
被final修饰的变量就是常量了。
如果代码是这样
final int num=3;
System.out.println("num="+num);
复制代码
就相当于直接把
System.out.println("num="+num);
复制代码
中的num直接替换为3
System.out.println("num="+3);
作者:
sk0806
时间:
2014-10-31 22:55
因为,内部类也是一个类,存在于堆内存中,只有当该类的引用消失后,内部类才会消失。
而局部变量存在与栈内存中,当调用结束后,即从内从中释放该属性。
所以内部类的生命周期大于局部变量的生命周期。内部类访问的话,可能会访问到已经消失的局部变量。
只有局部变量定义用final修饰后,局部变量存在于栈内存中,生命周期和工程的生命周期一样。内部类就可以访问了。
额,,,不知道理解的是否正确
作者:
姜浩
时间:
2014-10-31 22:57
方法中的内部类能不能访问方法中的局部变量,为什么?(这时一道基础面试题)
方法中的内部类与方法中的局部变量的生命周期不同。
内部类也是一个类,在内存中是存储在堆中的,也只有当该类的引用消失时,内部类的生命周期才会结束。
但是方法中的局部变量在方法调用结束,就结束了。内部类的生命周期超过局部变量,
内部类无法调用可能消失的属性,所以无法访问。
解决方案:在局部变量前加修饰符final,此时局部变量的生命周期就足以让内部类访问了。
作者:
田峻菘
时间:
2014-11-1 18:34
加final是为了解决生命周期问题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2