final: 为了避免子类随意更改父类的内容,java提供了final关键字,用于修饰不可改变的内容 当final修饰:
- 类:不可以被继承
- 方法:不可以被重写
- 变量:不可以被更改
注意事项:
- 引用类型的局部变量,被final修饰后,只能指向一个对象,后续不可以再更改指向,但是不影响对象内容的成员变量值的修改。
java8新特性 :Effectively final
Java中局部内部类和匿名内部类访问的局部变量必须由final修饰,以保证内部类和外部类的数据一致性,但是从Java8开始,我们可以不加final修饰符,由系统默认添加,当然在java8以前的版本是不允许这样的。
编写相同的代码,分别在java7和java8下运行,代码如下
public class Test {
public static void main(String[] args) {
String name = "C语言中文网";
new Runnable() {
@Override
public void run() {
System.out.println(name);
}
}
}
}
上图看name下标红色
图2和图3是java8后的代码,因为系统默认添加final修饰符,图3提示,final修饰的局部变量不能再被重新赋值,也就是说从Java8开始,他不要求程序员必须将访问的局部变量显示的声明未final,只要改变量不被重新赋值就可以
总结一下,规则没有改变,lambda表达式和匿名内部类访问的局部变量必须是final修饰的,只是不需要程序员显式的声明为final,从而节省时间