Java中Final,Final和Finalize之间的区别

作者: Laura McKinney
创建日期: 2 四月 2021
更新日期: 16 可能 2024
Anonim
Java编程入门 - (24) Java编程中的final,finally,finalize(二)finally和finalize (Java面试常见题)
视频: Java编程入门 - (24) Java编程中的final,finally,finalize(二)finally和finalize (Java面试常见题)

内容


“ final,finally和finalize”一词位于Java的概念中。它们中的每一个都具有不同的功能。 final,final和finalize之间的基本区别是: 最后 是访问修饰符, 最后 是一个街区 定案 是对象类的方法。在final,final和finalize之间还有一些其他差异,将在比较表中进行讨论。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较基础最后最后完成
基本的Final是Java中的“关键字”和“访问修饰符”。最后是Java中的“块”。Finalize是Java中的“方法”。
适用于Final是适用于类,变量和方法的关键字。最后是一个始终与try and catch块关联的块。finalize()是适用于对象的方法。
工作中(1)最终变量变为常量,并且无法重新分配。
(2)子类不能覆盖最终方法。
(3)最终班不能延长。
一个“ finally”块,清理“ try”块中使用的资源。Finalize方法在销毁对象之前执行与该对象有关的清理活动。
执行最终方法在调用时执行。“最终”块在执行“ try-catch”块之后立即执行。finalize()方法在对象销毁之前执行。

决赛的定义

“最终”是Java中的关键字。它是访问修饰符。 “ final”关键字适用于类,方法和变量。让我们看看它如何与每个人一起工作。


最终变量

  • 将final关键字应用于变量时,无法进一步修改。
  • 声明最终变量时必须对其进行初始化。
  • 在通用的编码约定中,最终变量在大写字母中声明。
  • 最终变量不会按实例占用内存。

最终int FILE_OPEN = 2;

最终方法

  • 当类中的方法声明为final时,其子类不能覆盖该方法。
  • 声明为final的小型方法可以由编译器“内联”,这将减少函数调用的开销并提高性能。
  • 覆盖的方法调用是动态解决的,但是当方法声明为final时,则不能覆盖它。因此,可以在编译时解决函数调用。

类A {final void meth(){System.out.ln(“这是一个最终方法。”); }}类B扩展了A {void meth(){//类别B无法继承类A的方法。System.out.ln(“不重写”); }}

最终班

  • 当一个类声明为final时,则任何子类都不能继承该类。
  • 将类声明为final将自动将其所有方法声明为final。
  • 您不能将一个类同时声明为“抽象”和“最终”。

最后的类A {// ...}类B扩展了A {//类B不能继承类A // ...}

  • 在Java中,“最终”是始终与try / catch块关联的块。
  • “ finally”块在try / catch块之后和try / catch块之后的代码之前执行。
  • 无论是否引发异常,“ finally”块都将执行。
  • 当引发异常时,即使没有catch块与该异常匹配,也将执行“ finally”块。
  • 当方法通过未捕获的异常或显式的return语句从try / catch块内部返回调用方时,“ finally”块将在方法返回调用方之前执行。
  • “ finally”块用于清理资源或释放“ try”块中使用的内存。
  • “ finally”块是可选的,但是在try / catch块之后编写finally块是一种好习惯。

class FinalExample {//此方法将异常抛出该方法。静态无效procA(){试试{System.out.ln(“ inside procA”);抛出新的RuntimeException(“ demo”); }最终{System.out.ln(“ procAs最终”); }} //从try块中返回。静态无效procB(){尝试{System.out.ln(“ inside procB”);返回; }最后{System.out.ln(“ procBs最终”); }} //正常执行try块。静态无效procC(){试试{System.out.ln(“ inside procC”); }最终{System.out.ln(“ procCs最终”); }} public static void main(String args){试试{procA(); } catch(Exception e){System.out.ln(“ Exception catched”); } procB(); procC(); }} //在procA的内部输出procA的final在procB的内部捕获的异常

完成的定义

  • Finalize是对象类中的一种方法。
  • 一个对象可能持有一些非Java资源,例如文件句柄;那么必须先将其释放,然后再销毁它。
  • 在完全破坏对象之前,垃圾回收器将调用此方法。
  • 此方法在销毁对象之前执行清除活动。

方法finalize()的一般形式如下。


protected void finalize(){//此处的完成代码}

finalize方法被声明为protected,因此无法从类外部对其进行访问。

始终在垃圾回收之前调用此方法。

  1. 关键字final是访问修饰符,final是一个块,finalize是一个方法。
  2. 关键字final适用于类,类和方法,final是与try catch块关联的块,用于处理异常,finalize是仅对对象起作用的方法。
  3. 一旦声明为final的变量将变为常量且无法再次分配,声明为final的方法不能被覆盖,并且一旦声明为final的类将永远不能被继承。 finally块用于清除try and catch块所利用的资源。 finalize方法用于在销毁对象之前清理对象使用的资源。

结论:

当应用于方法时,Final,final和finalize具有不同的效果。