final作为java的特殊关键字一般容易和static弄混,一旦被final初始化,那么值将不能被改变,final是只读的。下面将简单讲解下final关键字:
- 修饰类-表示该类不能被继承,注意用final修饰的类不能被CLLib动态代理~面试常问
- 修饰方法-表示该方法不能被重载
- 修饰类成员变量-表示该变量为常量,必须在构造函数完成之前被初始化,可以在声明时初始化
- 修饰方法变量-表示该变量无法被修改,方法入参如果是引用类型,建议加上final
final的好处(尽可能的多用final类型常量代替局部变量、方法成员变量)
- final关键字提高性能,JVM和Java引用都会缓存final变量
- final修饰的变量是线程安全的
- final关键字会被JIT优化
深入:final修饰的变量在JVM里面如何呈现?
final修饰的基本类型和String,将会在方法区的常量池里面