Java finalize方法

finalize() 方法是一种特殊的方法,当垃圾收集器确定不再有对该对象的引用时,垃圾收集器会在该对象上调用该方法。
它在 Object 类中定义。

protected void finalize() throws Throwable

finalize() 方法的主要目的是在对象被不可撤销地丢弃之前执行清理操作。
如果 finalize 方法抛出未捕获的异常,则忽略该异常并终止该对象的终结。
应用程序不会终止。

对于任何给定对象,Java 虚拟机永远不会多次调用 finalize 方法。

final、finally 和 finalize 之间有什么区别

简而言之,final是一个关键字,finally是一个块,finalize是一个方法。
它们在 Java 程序中有自己非常特定的用途。

https://onitroad.com 更多教程

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");
	}
}
Java final 和 finally finalize关键字
日期:2020-09-17 00:09:57 来源:oir作者:oir