为什么inner class在成员方法里面定义的时候,如果要使用该方法中的局部变量,这个局部变量一定要是final的
希望高手们说的详细点,我想知道为什么,谢谢!!

解决方案 »

  1.   

    好像只有匿名的inner Class才有这个规定吧,这似乎和匿名机制有关,也许在匿名innerClass中非只读外部变量不安全?谁知道设计者怎么想的。注意:我的语气如此不坚定大概是有原因的!
      

  2.   

    因为一个inner class在编译后生成一个独立的class文件,要对定义该方法中的局部变量进行访问就必须要在这个类加载之前该局部变量已经被加载到内存了,由于普通的局部变量只存在一个值,如果不用final,那么inner class中就无法访问到该变量的reference了!
      

  3.   

    “由于普通的局部变量只存在一个值,如果不用final,那么inner class中就无法访问到该变量的reference了!”
    这句话有点不明白, 用final 修饰的变量不就是初始化了之后不能被修改吗?
      

  4.   

    在方法中定义一个嵌套类,注意嵌套类不可以访问方法的局部变量。 
    因为方法的局部变量只存在与方法作用期间,故localvalue不可访问。而final变量的生命周期超出了方法,所以fianlvalue可用。
    上面的是从网上看到人家写的,是不是一个变量被修饰成final之后他的生命周期就变长了阿?
      

  5.   

    同意dogod~内部类分member inner class , local inner class , anonymous inner class; 其主要目的是对外部隐藏类的存在性。您所说的情况属于匿名内部类情况,就是不声明类名,直接使用“new”产生一个对象实例。看书的时候也没有仔细考虑过只是记得这种类在使用外部的局部变量时变量必须为final.