inner class 用法

问题提出: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值