java final关键字使用及面试题重点
final的简介
final 在 Java 中是一个保留的关键字,可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。
1.修饰类,类不能被继承
不能有子类,但可以有父类
一个类是final的,其中所有的成员方法不能被覆盖重写
2.修饰成员方法,不能被重写
3.修饰成员变量,变量不能被修改
(1)由于成员变量有默认值,用了final之后必须手动赋值,不会再给默认值了
(2)对于final修饰的成员变量,要么使用直接赋值,要么使用构造方法赋值,二者选其一
(3)必须保证类中所有重载的构造方法,都最终会对final的成员变量进行赋值–默认构造方法和构造方法
4.修饰局部变量,变量不能被修改,即使与之前的值相同也不可以
对于基本类型来说,不可变说的是变量当中的数据不可变
对于引用类型来说,不可变说的是变量当中的地址值不可变(里面的指向可以改变)
final Student stu = new Student("Lucy");
stu = new Student("Tom");//错误的写法,地址不可改变
stu.setName("LucyLucy");//正确的,地址所指向的对象可改变
使用final关键字的好处:
1.final方法比非final快一些
2.final关键字提高了性能。JVM和Java应用都会缓存final变量。
3.final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
4.使用final关键字,JVM会对方法、变量及类进行优化。