Java finalize方法
finalize() 方法是一种特殊的方法,当垃圾收集器确定不再有对该对象的引用时,垃圾收集器会在该对象上调用该方法。
它在 Object 类中定义。
protected void finalize() throws Throwable
finalize() 方法的主要目的是在对象被不可撤销地丢弃之前执行清理操作。
如果 finalize 方法抛出未捕获的异常,则忽略该异常并终止该对象的终结。
应用程序不会终止。
对于任何给定对象,Java 虚拟机永远不会多次调用 finalize 方法。
final、finally 和 finalize 之间有什么区别
简而言之,final
是一个关键字,finally
是一个块,finalize
是一个方法。
它们在 Java 程序中有自己非常特定的用途。
Java finally 块
Java finally 块是用于异常处理的 try-catch-finally 块的一部分。
无论是否从 try 块中抛出异常,finally 块都保证会被执行。
理想情况下,finally 块用于释放 try 块中使用的资源。
它主要用于资源清理活动,有助于节省内存和资源利用率。
try { //open file //read file } catch(Exception e) { //handle exception while reading the file } finally { //close the file }
Java final关键字
final 关键字使 Java 变量、方法或者类成为 final(一旦初始化就不能更改)。
final 变量
声明为“final”的变量在第一次初始化后不能再赋值。
final 变量的初始化可能只发生在两个地方......
- 在声明最终变量时
public class MyClass { public final String VERSION = "1.0"; }
- 如果在声明期间未初始化变量,则在构造函数内部
public class MyClass { public final String VERSION; public MyClass() //constructor { this.VERSION = "1.0"; } }
一旦 final 变量被初始化,我们就不能在程序的任何地方改变它的值。
尝试进行更改将导致编译错误“The final field MyClass.VERSION cannot be assigned(无法分配最终字段 MyClass.VERSION)”。
final 方法
final 方法不能在子类中被覆盖。
如果我们希望一个方法是 final 并且不会被子类覆盖,我们需要将它声明为 final
。
public class ParentClass { public final void showMyName() { System.out.println("In ParentClass"); } }
尝试覆盖 showMyName()
方法将导致编译时错误 Cannot override the final method from ParentClass
。
final类
在 Java 中,我们不能继承 final 类。
没有一个类可以继承 final 类并继承它的字段和方法。
public class final ParentClass { public void showMyName() { System.out.println("In ParentClass"); } }