黑马程序员技术交流社区

标题: 内部类中的问题 [打印本页]

作者: 曾祥旭    时间: 2013-3-7 09:43
标题: 内部类中的问题
本帖最后由 曾祥旭 于 2013-3-7 15:49 编辑

       当内部类定义在局部时,在局部定义的int类型的y为什么要被final修饰,被final修饰后不就不可赋值,成为常量了吗?
方法中传递的参数为什么也要定义成final?目前,已经被毕老师的解释给绕进去了,实在想不懂,求助。
如下代码:
    class Outer{
private int num=3;
void method(final int a){
  final int y=8;//内部类在局部位置上只能访问具备中被final修饰的局部变量。
  class Inner{
   void function(){
   
   System.out.println(y);
   
   }
  }
  new Inner().function();
}
}
public class Test{
public static void main(String[] args){
  Outer o=new Outer();
     o.method(2);
}
}
   

作者: 黑马_位志国    时间: 2013-3-7 09:51
这是百度上的一个帖子,希望对你有帮助
http://zhidao.baidu.com/question/482544491
作者: scott0610    时间: 2013-3-7 09:56
Java要求所有被内部类访问的局部变量都使用final修饰也是有其原因的:对于普通的局部变量而言,它的作用域就是停留在该方法内,当方法执行结束,该局部变量也随之消失;
但在内部类则可能产生隐式的“闭包”,闭包将使得局部变量脱离它所在的方法继续存在。

希望对你有所帮助!
作者: amen0205    时间: 2013-3-7 11:52
1   因为局部变量 创建在栈中  作用范围在方法内   当方法结束时  局部变量就没了  而内部类却还存在   这就发现内部类的生命周期比局部变量长的多  你局部变量如果没了  我内部类该怎么用呢?  所以要final修饰  是局部变量的生命周期变长。
2   参数被final修饰  参数也是局部变量  不能违背1的原则   
作者: 曾祥旭    时间: 2013-3-7 15:50
黑马_位志国 发表于 2013-3-7 09:51
这是百度上的一个帖子,希望对你有帮助
http://zhidao.baidu.com/question/482544491

不错,很详细
作者: 曾祥旭    时间: 2013-3-7 15:51
门文通 发表于 2013-3-7 11:52
1   因为局部变量 创建在栈中  作用范围在方法内   当方法结束时  局部变量就没了  而内部类却还存在   这 ...

好的,谢谢




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