学习之Java学习

Java关键字之final

2021-07-17  本文已影响0人  小丸子的呆地

final关键字可以用来修饰类、变量、方法。

final 局部变量

声明的时候可以不赋值,使用之前一定要赋值,否则编译错误。

final 成员变量

必须在声明的时候赋值或者代码块中赋值。

final static 局部变量

被final 和 static 同时修饰的类变量为常量。

匿名内部类和内部类使用外部类的局部变量时为什么要加final

R大的三篇文章:
关于对象与闭包的关系的一个有趣小故事
JVM的规范中允许编程语言语义中创建闭包(closure)吗?
为什么Java闭包不能通过返回值之外的方式向外传递值?

因为匿名内部类和内部类的实现其实是JVM帮我们悄悄生成了一个新的class,这也是,并且将依赖的外部类的变量做了一个copy放在了新类下,从理论上这两个变量应当保证一致,所以使用final 修饰,干脆让其不可变,也就不会发生不一致。

JDK1.8之前是需要显示的添加final修饰局部变量。

JDK1.8开始不用添加了。


image.png

但是这只是一颗语法糖,编译完成之后,仍然会被加上final,不信可以尝试在内部类中修改外部局部变量,一样会编译错误。


image.png
上一篇 下一篇

猜你喜欢

热点阅读