java基础final解释

109 阅读1分钟

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);
            }
        }
    }
}

image.png

上图看name下标红色

image.png

图2和图3是java8后的代码,因为系统默认添加final修饰符,图3提示,final修饰的局部变量不能再被重新赋值,也就是说从Java8开始,他不要求程序员必须将访问的局部变量显示的声明未final,只要改变量不被重新赋值就可以


总结一下,规则没有改变,lambda表达式和匿名内部类访问的局部变量必须是final修饰的,只是不需要程序员显式的声明为final,从而节省时间