谈谈final、 finally、finalize的区别
考点:考察求职者对这3个Java关键字的理解和区分。
出现频率:★★★★
【面试题解析】
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final,防止了人们覆盖length()方法。
另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。
final类似于C/C++中的常量,可作类、成员方法、数据成员以及局部变量的修饰符。在修饰类及成员方法时,能够控制类及成员方法是否被继承或重写等功能。
• 修饰类:类不能被继承。
• 修饰成员方法:方法不能被重写。•
修饰数据成员:定义数据成员为常量,可在定义时或者在构造方法中初始化,当与static合用时,只能在定义时初始化。
• 修饰局部变量:定义常量,一经初始化不能再修改。
面试题中的3个拼写非常接近的关键字在使用中有很大的不同,一般的求职者只需要区分这3个关键字的用法即可。
参考答案:
final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候,会调用被回收对象的此方法,可以覆盖此方法,提供垃圾收集时的其他资源回收,例如关闭文件等。