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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾祥旭 中级黑马   /  2013-3-7 09:43  /  2009 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曾祥旭 于 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);
}
}
   

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

5 个回复

倒序浏览
这是百度上的一个帖子,希望对你有帮助
http://zhidao.baidu.com/question/482544491
回复 使用道具 举报
Java要求所有被内部类访问的局部变量都使用final修饰也是有其原因的:对于普通的局部变量而言,它的作用域就是停留在该方法内,当方法执行结束,该局部变量也随之消失;
但在内部类则可能产生隐式的“闭包”,闭包将使得局部变量脱离它所在的方法继续存在。

希望对你有所帮助!

点评

谢啦  发表于 2013-3-7 15:53
回复 使用道具 举报
1   因为局部变量 创建在栈中  作用范围在方法内   当方法结束时  局部变量就没了  而内部类却还存在   这就发现内部类的生命周期比局部变量长的多  你局部变量如果没了  我内部类该怎么用呢?  所以要final修饰  是局部变量的生命周期变长。
2   参数被final修饰  参数也是局部变量  不能违背1的原则   

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
黑马_位志国 发表于 2013-3-7 09:51
这是百度上的一个帖子,希望对你有帮助
http://zhidao.baidu.com/question/482544491

不错,很详细
回复 使用道具 举报
门文通 发表于 2013-3-7 11:52
1   因为局部变量 创建在栈中  作用范围在方法内   当方法结束时  局部变量就没了  而内部类却还存在   这 ...

好的,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马