final是java的一个关键字,他可以用于修饰类,方法,变量。此关键字的作用在于表明它所修饰的内容是不可改变的。
1 修饰变量
final顾名思义是最终的意思,他修饰变量意味着这个变量的值不能再更改。一个即是static又是final的常量会占据一段不能改变的内存空间。对于这样的常量,我们的命名规范是约定俗成的大写字母加下划线,如下:
private static final int TEST_FINAL = 1;
在修饰引用变量的时候,这个值是指的其引用不变,但引用的对象的内容是可变的。而在修饰基本变量如int时,则意味着这个基本类型的值不能改变。值得注意的是,final在修饰String类的对象时,其值和修饰基本变量类型是一样不能改变的。答案可以在这篇博客中找到:[Java] String类深度解析。这里不再展开。
2 修饰方法
final修饰的一个方法代表这个方法可以被继承,但是不可以被子类重写。一般对一个方法加上final关键字作为修饰,代表这个方法你认为不需要再重写和修改,而是想要确保在继承中方法的行为保持不变。
在过去,建议使用final 方法的另一个原因在于效率,final方法是在程序编译的时候就静态绑定了,但是在如今的jvm中这个速度已经可以忽略不计了。并且,也不再建议出于效率目的使用final。
此外,一个类中所有的private方法都是隐式的被指定为final 的。因此对private方法添加final关键字没有任何意义。private方法不能被取用,因此也无法覆盖。
3 修饰类
final类不能被继承,其修饰的类功能通常是完整的。
与finally区别?finally 通常用在异常处理中。异常处理可以参考这篇文章:java异常机制详解。
与finalize区别?finalize是在Object类中定义的方法,是在垃圾回收时虚拟机调用来终结对象的方法。