1.是什么
final
、finally
、和finalize
是Java中三个容易混淆但功能完全不同的关键字或方法。下面我将详细解释它们之间的区别,并通过例子来说明。
1. final
final
是一个修饰符,它可以用来修饰类、方法和变量。
- 修饰类:表示该类不能被继承。
- 修饰方法:表示该方法不能被子类重写。
- 修饰变量:表示该变量的值一旦被初始化之后就不能被改变(对于基本数据类型)或者该变量的引用一旦指向某个对象之后就不能再指向其他对象(对于对象引用)。
例子:
java
final class FinalClass {
// FinalClass不能被继承
}
class MyClass {
final void finalMethod() {
// finalMethod不能被重写
}
final int finalVariable = 10; // finalVariable的值不能改变
}
2. finally
finally
是一个块,它通常与try-catch
语句一起使用,无论是否捕获到异常,finally
块中的代码都会被执行。它主要用于执行清理代码,如关闭文件流、释放资源等。
例子:
java
try {
// 尝试执行的代码块
// 可能会抛出异常的代码
} catch (Exception e) {
// 捕获异常并处理的代码块
} finally {
// 无论是否捕获到异常,finally块中的代码都会被执行
// 用于执行清理工作,如关闭文件流等
}
3. finalize
finalize
是Object
类的一个方法,它在垃圾收集器决定销毁对象之前被调用。它用于执行清理操作,如释放非内存资源。但是,需要注意的是,finalize
的调用是不确定的,且从Java 9开始,finalize
方法已被标记为过时(deprecated),并可能在未来的版本中完全移除。因此,建议避免使用finalize
方法,而是使用try-with-resources
语句或java.lang.ref.Cleaner
等现代资源管理机制。
注意 :由于finalize
方法通常不推荐使用,这里仅提供一个概念性的说明,而不提供具体的代码示例。
总结:
final
:用来修饰变量、方法和类,表示不可更改或继承。finally
:在异常处理过程中,无论是否抛出异常,都会执行的代码块,常用于释放资源。finalize()
:在对象被垃圾回收之前被调用的方法,用于清理资源,但已被弃用,不推荐使用。
好啦,今天的干货就到这啦~ 有什么疑问的小伙伴欢迎到评论区留言!