java内部类中的final参数问题

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

测试代码:

Code:
  1. importjava.awt.Image;
  2. publicclassTest
  3. {
  4. //publicvoidoutputA(Imageimage)//错误代码
  5. publicvoidoutputA(finalImageimage)
  6. {
  7. newTestB(){
  8. publicvoidoutput()
  9. {
  10. System.out.println(image.getWidth(null));
  11. }
  12. };
  13. }
  14. }
  15. classTestB
  16. {
  17. publicvoidoutputB(Imageimage)
  18. {
  19. intwidth=image.getWidth(null);
  20. }
  21. }

如上所示,如果将第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,打开之后没有找到上面的内容。呵呵,暂且放下,留待以后研究吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值