Java中Final,Final和Finalize之间的区别
内容
“ final,finally和finalize”一词位于Java的概念中。它们中的每一个都具有不同的功能。 final,final和finalize之间的基本区别是: 最后 是访问修饰符, 最后 是一个街区 定案 是对象类的方法。在final,final和finalize之间还有一些其他差异,将在比较表中进行讨论。
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 最后 | 最后 | 完成 |
---|---|---|---|
基本的 | Final是Java中的“关键字”和“访问修饰符”。 | 最后是Java中的“块”。 | Finalize是Java中的“方法”。 |
适用于 | Final是适用于类,变量和方法的关键字。 | 最后是一个始终与try and catch块关联的块。 | finalize()是适用于对象的方法。 |
工作中 | (1)最终变量变为常量,并且无法重新分配。 (2)子类不能覆盖最终方法。 (3)最终班不能延长。 | 一个“ finally”块,清理“ try”块中使用的资源。 | Finalize方法在销毁对象之前执行与该对象有关的清理活动。 |
执行 | 最终方法在调用时执行。 | “最终”块在执行“ try-catch”块之后立即执行。 | finalize()方法在对象销毁之前执行。 |
决赛的定义
“最终”是Java中的关键字。它是访问修饰符。 “ final”关键字适用于类,方法和变量。让我们看看它如何与每个人一起工作。
最终变量
- 将final关键字应用于变量时,无法进一步修改。
- 声明最终变量时必须对其进行初始化。
- 在通用的编码约定中,最终变量在大写字母中声明。
- 最终变量不会按实例占用内存。
最终方法
- 当类中的方法声明为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,因此无法从类外部对其进行访问。
始终在垃圾回收之前调用此方法。
- 关键字final是访问修饰符,final是一个块,finalize是一个方法。
- 关键字final适用于类,类和方法,final是与try catch块关联的块,用于处理异常,finalize是仅对对象起作用的方法。
- 一旦声明为final的变量将变为常量且无法再次分配,声明为final的方法不能被覆盖,并且一旦声明为final的类将永远不能被继承。 finally块用于清除try and catch块所利用的资源。 finalize方法用于在销毁对象之前清理对象使用的资源。
结论:
当应用于方法时,Final,final和finalize具有不同的效果。