前言
final
、finally
和finalize
是Java中用于异常处理的关键字。每个关键字都有不同的功能。final
, finally
和finalize
的基本区别在于,final
是一个访问修饰符,finally
是Exception Handling
中的块,finalize
是对象类的方法。
与此同时,final
, finally
和finalize
之间也有很多区别。下面列出了final
、finally
和finalize
之间的区别:
说明 | final | finally | finalize |
---|---|---|---|
定义 | Final是关键字和访问修饰符,用于对类、方法或变量施加限制 | finally 是Java异常处理中的块,用于执行重要的代码,无论异常是否发生 | finalize是Java中的一个方法,用于在对象被垃圾回收之前执行清理处理 |
适用 | Final关键字用于类、方法和变量 | Finally块总是与异常处理中的try and catch块相关 | Finalize()方法与对象一起使用 |
功能 | (1)一旦声明,最终变量就变成常量,不能修改。(2) final方法不能被子类重写。(3) final类不能继承。 | (1)最后一个块运行重要的代码,不管是否发生异常。(2)最后块清理所有在try块使用的资源 | Finalize方法在对象销毁之前对其执行清理操作 |
执行 | 只有在调用Final方法时才会执行 | Finally块在try-catch块执行时立即执行。它的执行不依赖于异常。 | Finalize方法在对象销毁之前执行 |
1. final 例子
让我们考虑下面的例子,其中我们声明最终变量age。一旦声明,就不能修改;
public class FinalExampleTest {
//declaring final variable
final int age = 18;
void display() {
// reassigning value to age variable
// gives compile time error
age = 55;
}
public static void main(String[] args) {
FinalExampleTest obj = new FinalExampleTest();
// gives compile time error
obj.display();
}
}
结果:
在上面的例子中,我们声明了一个变量final。类似地,可以使用final关键字声明方法和类final;
2. finally 例子
让我们看看下面的示例,其中Java代码抛出一个异常,catch块处理该异常。稍后,在try-catch块之后执行finally块。此外,代码的其余部分也会正常执行;
FinallyExample.java
public class FinallyExample {
public static void main(String args[]){
try {
System.out.println("Inside try block");
// below code throws divide by zero exception
int data=25/0;
System.out.println(data);
}
// handles the Arithmetic Exception / Divide by zero exception
catch (ArithmeticException e){
System.out.println("Exception handled");
System.out.println(e);
}
// executes regardless of exception occurred or not
finally {
System.out.println("finally block is always executed");
}
System.out.println("rest of the code...");
}
}
结果:
3. finalize 例子
FinalizeExample.java
public class FinalizeExample {
public static void main(String[] args)
{
FinalizeExample obj = new FinalizeExample();
// printing the hashcode
System.out.println("Hashcode is: " + obj.hashCode());
obj = null;
// calling the garbage collector using gc()
System.gc();
System.out.println("End of the garbage collection");
}
// defining the finalize method
protected void finalize()
{
System.out.println("Called the finalize() method");
}
}
结果: