final—修饰符(关键字)
如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。一般,当一个类设计完美或者不需要被继承才用于修饰类,或者一个工具类也可以被申明为final。一个类为final,意味着其内部的方法都是final的。
将方法声明为final,则方法在子类中不能被重写,表示这个方法很重要,不应该被改变或者这个方法已经足够好了。同时,final方法允许编译器转化为inline调用,也就是这段代码会被调用其的方法在这个方法内部调用,而不是采用通常的方法调用;好处是不必执行再保存断电,压栈等消耗较大的操作。
将成员或者变量定义为final,那么这个变量一旦被初始化就不能被修改,而初始化只能在定义或者构造函数中选一处进行。同时final可以修饰函数参数,对于对象final参数,那么这个对象在方法调用就不能被改变,增强代码的安全性和可读性。但是,传入对象的属性还是可以被修改。
finally—异常处理
异常处理时提供 finally 块来执行清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。finally主要用于清理非JVM内存资源。
finalize—方法
Java 技术允许使用 finalize() 方法,在垃圾收集器将对象从内存中清除出去之前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
但JVM不保证这个方法一定会被调用,同时JVM规范这个方法只会被调用一次。通常finalize用于一些不容易控制且非常重要的资源释放,比如IO,数据库连接等。