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