Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
来源:互联网 发布:理财成功案例知乎 编辑:程序博客网 时间:2024/05/17 08:55
java内部类有什么好处?为什么需要内部类?
首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你 可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能。
不过你可能要质疑,更改一下方法的不就行了吗?
的确,以此作为设计内部类的理由,实在没有说服力。
真正的原因是这样的,java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题——没有多继承。实际上,C++的多继承设计起来很复杂,而java通过内部类加上接口,可以很好的实现多继承的效果。
------------------------------------------------------------------------------------------------------------------------------------------------
如果没有final的话,那么内部类使用的外部类局部变量要用哪个值呢?
使用内部类经常是用在Listener这样的。
而Listener中的监听函数被调用时,大部分情况,new内部类所在的函数早就执行完了,此时外部类局部变量早就不存在了。
而加上final后,编译器是这样处理内部类的。如果这个外部局部变量是常量,则在内部类代码中直接用这个常量。如果是类的实例,则编译器将产生一个内部类的构造参数,将这个final变量传到内部类里,这样即使外部局部变量无效了,还可以使用。
另外引用别人的一段话:
内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。
这样理解就很容易得出为什么要用final了,因为两者从外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影响到原参数,然而这样却失去了参数的一致性,因为从编程人员的角度来看他们是同一个东西,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是final来规避这种莫名其妙错误的存在。
- Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
- Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
- Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
- Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
- Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
- [Java] 匿名内部类访问外部类的局部变量为什么一定得是final类型
- 内部类引用外部类局部变量,外部类局部变量必须是final
- 内部类引用外部类局部变量
- Java内部类引用外部类中的局部变量为何必须是final问题解析
- Java内部类引用外部类中的局部变量为何必须是final问题解析
- Java内部类引用外部类中的局部变量为何必须是final问题解析
- Java内部类引用外部类中的局部变量为何必须是final?
- java中内部类访问局部变量为什么要定义局部变量为final
- 局部内部类+外部类访问final变量+final 回顾
- 局部内部类引用外部类中的局部变量必须是final属性的!
- 局部内部类引用外部类中的局部变量必须是final属性的!
- 局部内部类引用外部类中的局部变量必须是final属性的!
- 局部内部类引用外部类中的局部变量必须是final属性的!
- 1021. 个位数统计 (15)
- LeetCode || N-Queens II
- 大端模式 小端模式
- net_device 结构
- 写了一个增量式的爬虫,但是并不完美,希望大牛们可以指正指正!
- Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?
- Spring AOP增强类型
- 浅析“进位计数制及数制转换”
- 1022. D进制的A+B (20)
- 数据库Sharding的基本思想和切分策略
- Unable to execute dex: method ID not in [0, 0xffff]: 65536
- Android 笔记7
- hadoop2.x的HA简介
- 如何让优秀文章排名大于原创文章