inner class 用法

来源:互联网 发布:qq旋风破解版 mac 编辑:程序博客网 时间:2024/06/08 16:24
问题提出:inner class中使用的参数为什么必须为final啊?
interface   A   { 
      void   f(); 


class   B   { 
      public   A   m(final   int   a)   { 
          return   new   A()   { 
                    int   b   =   a; 
                    void   f()   {}; 
          } 
}   

请问   final   int   a,   为什么必须是final

------解决方案--------------------
内部类使用注意事项: 
这里不考虑静态内部类,因为没有什么特别的限制 
1.内部类不允许静态修饰(包括静态域,方法,静态初始化) 
2.内部类可以直接访问外围类的方法。 
3.内部类可以直接访问外围类的成员变量,语法为:OuterClass.this.FIELDNAME。 
4.如果要访问方法的参数,必须为final,主要针对匿名类和临时内部类而已,因为他们定义 
在方法体内。这里把方法体的临时变量作为一个延生,也是必须为fianl的。这样做是为了规范内部类的行为. 

这是出于变量作用域的限制考虑. 内部类能使用的变量局限于内部类里面声明的变量, 一般情况下不能使用外面的. 但如果外部变量被声明为final的, 就相当于是一个全局变量, 它的生命周期就扩展到内部类里面了, 因此可以访问. 

加final修饰符是为了防止该变量指向其他引用,比如你将这个变量指向null而外部类却毫不知情的继续在使用这个null的变量 


自己也可以尝试一下:

class Gizmo{ 
public void sppin(){} 

public class FinalArguments{ 
void with(final Gizmo g){ 
//不能 g=new Gizmo(); 

void without(Gizmo g){ 
g=new Gizmo();//这里就是可以的哦。 



0 0
原创粉丝点击