java内部类中的final参数问题

这两天写程序的过程中遇到了一个问题:参数必须是终态的(final),否则程序报错!思考良久还是想不通,去网上搜索了半天也没有找到原因。最后还是在某QQ群里面得到了一位高人的指点,然后自己才找到了一些相关信息。虽然现在还是不太懂,但好在找到了方向。暂且记下吧!

测试代码:

Code:
  1. import java.awt.Image;  
  2.   
  3. public class Test  
  4. {  
  5.     //public void outputA(Image image) //错误代码  
  6.     public void outputA(final Image image)  
  7.     {  
  8.         new TestB(){  
  9.             public void output()  
  10.             {  
  11.                 System.out.println(image.getWidth(null));  
  12.             }  
  13.         };  
  14.     }  
  15. }  
  16.   
  17. class TestB  
  18. {  
  19.     public void outputB(Image image)  
  20.     {  
  21.         int width = image.getWidth(null);  
  22.     }  
  23. }  

如上所示,如果将第6行的代码换成第5行(即注释第6行并取消注释第5行),程序的11行处就会提示:Cannot refer to a non-final variable image inside an inner class defined in a different method。

如此一来,这个参数就变成了final参数。关于这,我找到了一点儿信息:Java允许我们将参数设成final属性,方法是在参数列表中对它们进行适当的声明。这意味着在这个方法的内部,我们不能改变该参数指向的东西(对象)。

网友告诉我:


Thinking   in   java里面的说法(唯一正确的说法):
如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final的。
说明一下:
1.匿名内部类肯定是局部内部类(在一个方法里面定义的内部类),因为在java中,语句必须写在方法里,而匿名内部类其实就是一条特殊的语句;
2.外部给定的对象就是所有外来的对象:外部方法的形参、局部变量、基本类型或自定义类型等。

我从网上下载了一个 thinkinjava.pdf,打开之后没有找到上面的内容。呵呵,暂且放下,留待以后研究吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值