定义在方法中的内部类,要访问方法中定义的本地变量或方法参数时,为什么这些变量要声名为final的呢?

解决方案 »

  1.   

    因为在方法中,定义的变量相当于局部变量.
    用FINAL定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期.
      

  2.   

    内部类可以访问其所在方法的局部变量,但不能修改.因为内部类在使用的是那些变量的副本
    所以为了避免你错误地以为修改了那些变量,就强制你必须用final来修饰变量,不让你修改
      

  3.   

     回复人:feifniao(飞飞鸟) ( 一级(初级)) 信誉:100  2006-11-10 18:30:31  得分:0

    因为在方法中,定义的变量相当于局部变量.
    用FINAL定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期.说的有道理,因为方法里定义的变量其生命同期会随着方法的结束而结束,内部类还可以再次利用,那能也就是说它的生活周期并不随方法结束而结束,当然不可以访问普通的局总变量了,用final定义的变量是一相不可变化的变量(一个常量),生命周期就不随方法的结束而结束了~~
      

  4.   

    在一个方法内定义的局部内部类的作用域也仅限于该方法内,出了该方法就不能再使用该类了
    lingwen20错了
      

  5.   

    哈哈,这个问题,在 thinking in java 中明确说明,我昨天刚看到。
      

  6.   

    呵呵我再补充补充吧~~“方法定义的一个变量”(其实你的例子中是“形参”,但一样啦)是所谓的“局部变量”,当这个方法结束的时候,这个变量也就不存在了。而匿名类只是在这个方法的语句体中定义,并不一定在当时执行,虽然从语法上它可以访问到外面定义的那个变量,但如果真执行到那句的时候,那个变量不存在了,怎么办呢?所以,办法就是,在匿名类的创建之初,就让那个被访问的变量“凝固”下来,这就是 final 的作用啦,相当于把那个“变量”理解为“常量”。如果访问的是外部类的“实例变量”,当然也就没有这个限制了。