并不是同部分人所说的因为生命周期的问题,gc是否回收跟是否用final修饰并没有关系。
final定义的是不可修改(对象指向的地址不可被修改,地址对应对象内部属性可以修改)
内部类和外部类实际上是同级的,他们在编译时会被编译成两个独立的class文件。
内部类能获取到外部类变量的原因是在构造外部类的时候回通过继承的方式,将外部类以及对应的参数当做构造参数传递到内部类的实现类中,从而达到内部类对变量和外部类的持有。
final的真正用途是为了防止变量传递进内部类之后,被重新赋值了(不管是在外部类或者内部类中),会出现赋值无法同步到另一边的问题。所以为了解决这个问题就禁止了变量的修改。
java8之后可以不写final的原因:
因为java8具有一个新特性:即没发生重赋值的变量自动识别(添加)final,类似kotlin里面的变量类型自动识别,但是当你违背了这种自动识别机制之后(即变量发生了重赋值),就会和内部类的final需求产生冲突,报错提示你必须手动添加final修饰
版权声明:本文为tian2342原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。