版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32635069/article/details/82813431
final这个关键字的作用
- final关键字提高了性能。JVM和java应用都会缓存final变量
- final变量可以安全的在多线程环境下进行共享,且不需要额外的同步开销
- 使用final关键字,JVM会对方法、变量及类进行优化
final关键字要注意的一些地方,final主要作用,他会保证安全性,并对代码进行一定的优化
- 修饰的类不可再被继承
- 修饰的方法不可在被重写
- 修饰的成员变量必须在声明时或构造函数中初始化
- 修饰的静态变量必须在声明时被初始化
- 修饰的本地方法变量,使用前初始化
- 接口中的变量默认是final的
- 在局部类和匿名类中使用的类都是final的,这样来保证数据的一致性
public class Test {
public static void main(String[] args) {
}
public void test(final int b) {
final int a = 10;
new Thread(){
public void run() {
System.out.println(a);
System.out.println(b);
};
}.start();
}
}
当test方法执行完毕之后,变量a的生命周期就结束了,而此时Thread对象的生命周期很可能还没有结束,那么在Thread的run方法中继续访问变量a就变成不可能了,但是又要实现这样的效果,怎么办呢?Java采用了 复制 的手段来解决这个问题
在内部类中会申明一个相同的局部变量,这样来解决生命周期的问题,可是这样引起了,数据可能不一致的问题,所以要求将即将访问的变量设定为final