Java中final Vs finally Vs finalize区别
Java中final,final和finalize之间的差异是一个重要的访谈问题。一个原因是,这些词听起来很相似,另一个原因是,它使面试官有机会拓展到许多其他领域。从最后开始,我们可以继续讨论继承或者方法重写。从最后开始,我们可以开始处理异常。从finalize方法,我们可以讨论Object类。因此,我们只会看到一个问题,最终Vs最终Vs在Java中最终确定具有如此巨大的潜力!
现在,当这些单词的重要性在Java中最终确定,最终确定和最终确定之后,让我们尝试获取有关它们的一些详细信息。
它们之间的不同点是final和final是Java中的保留关键字,而另一方面finalize()是一种方法。虽然当我们谈论final时通常会说" finally块",因为我们将编写一个包含在final范围内的代码块。 。
Java中final Vs finally Vs finalize比较
final – final关键字限制对变量,方法或者类的访问。
当final与变量一起使用时,该变量的值一旦初始化就无法更改。
当方法声明为final时,该方法不能被任何子类覆盖。
当某个班级宣布为最终班级时,该班级将无法扩展。
final变量示例
public class FinalVar {
public static void main(String[] args) {
final int test = 7;
// modifying final variable
test++;
}
}
这里的test是最终变量,因此更改其值将导致编译时错误"最终局部变量test无法分配。它必须为空并且不能使用复合分配。"
final方法示例
class Read {
public final void readFile() throws IOException{
System.out.println("read file");
}
}
public class FileRead extends Read {
// Overridden method
public void readFile() throws IOException{
File file = new File("D://test.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
}
}
在这里,readFile()在父类Read中被标记为final,因此尝试在子类FileRead中覆盖它会导致编译时错误"无法从Read中覆盖final方法"。
final类示例
final class Read {
public void readFile() throws IOException{
System.out.println("read file");
}
}
public class FileRead extends Read {
...
...
}
在这里,Read类标记为final,因此无法将其归类。试图扩展Read类的FileRead类将导致编译时错误" FileRead类型不能将最终类Read子类化"。
最终–最终关键字是Java中异常处理的一部分。它与try-catch块一起使用。无论是否在try块中包含的代码中引发了异常,始终执行在finally块中包含的代码。
如果try块内没有抛出异常,则try块存在时将执行finally块。
如果在try块中引发了异常,并且有一个catch块与所引发的异常的异常类型相匹配,则catch块首先执行,然后是finally块。
万一catch块无法处理引发的异常,则在方法返回之前,仍然会执行block。
因为可以保证将始终执行finally块,所以它用于放置清理代码。如果在代码中创建了用于读取或者写入文件的任何输入或者输出流,或者已打开数据库连接,那么最后块是关闭这些资源的安全位置。
Java Finally示例程序
public class FileRead {
public void readFile(){
BufferedReader br = null;
try{
br = new BufferedReader(new
InputStreamReader(new FileInputStream(new
File("D:\test1.txt"))));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
FileRead fr = new FileRead();
fr.readFile();
}
}
finalize –垃圾回收器线程在垃圾回收任何对象之前调用finalize()方法。
finalize方法作为受保护的方法存在于Object类中,其语法如下
protected void finalize() throws Throwable
由于finalize方法在Object类中,因此它被Java中的每个类继承。 Object类中的finalize方法没有实现,因此需要清理的类必须重写它才能执行清理或者处理系统资源。
Java Finalize方法示例
public class FinalizeExample {
int num;
FinalizeExample(int num){
this.num = num;
}
public static void main(String[] args) {
FinalizeExample obj1 = new FinalizeExample(5);
FinalizeExample obj2 = new FinalizeExample(5);
// object reference set as null explicitly
// that makes it eligible for garabge collection
obj1 = null;
obj2 = null;
// System.gc() call request to run garbage collector
System.gc();
}
@Override
protected void finalize() throws Throwable {
System.out.println("finalize method called for FinalizeExample object");
}
}
输出:
finalize method called for FinalizeExample object finalize method called for FinalizeExample object

