首页 > 试题广场 >

finally代码块和finalize()方法有什么区别?

[问答题]
finally代码块和finalize()方法有什么区别?
finally只可以用于try{}catch块中,无论最后是否抛出了异常,都会执行,一般可以用于最后的资源回收和关闭资源。finallize()是object类中的一个protect方法,主要作用是在垃圾回收处理之前,可以由虚拟机进行调用,可以让该对象重新引用,不被回收
编辑于 2018-05-30 08:18:48 回复(0)
更多回答
1. final是关键字,final可以修饰类、方法、属性。
    如果一个类被final修饰,那么这个类就是最终类,不能派生出新的子类,不能作为父类被继承,该类中的所有方法都不能被重写,但是final类中的成员变量是可以改变的,要想final类中的成员变量的不可以改变,必须给成员变量添加final修饰。因此,一个类不能同时被final和abstract修饰,这两个关键字相互矛盾。
    如果final修饰方法,那么这个方法是最终方法,不允许任何子类重写该方法,但子类仍可以使用该方法,注意:final参数用来表示这个参数在这个函数内部不允许被修改。
    final修饰属性,被final修饰的变量不可变。这里的不可变有两重含义:引用不可变和对象不可变。final指的是引用不可变,即它只能指向初始化时指向的那个对象,而不关心指向对象内容的变化。因此,被final修饰的变量必须初始化,该变量其实就是常量。
2. finally作为异常处理的一部分,只能用在try/catch语句快中,finally代码块中的语句一定会被执行,经常被用来释放资源,如IO流和数据库资源的释放。
3. finalize是Object类的一个方法,该方法在Object类中声明:
        protected void finalize() throws Throwable { } 
    在垃圾回收器执行时会调用被回收对象的finalize()方法,可以覆盖此方法来实现对其资源的回收。注意:一旦垃圾回收器准备释放某个对象占用的空间,将首先调该对象的
finalize()方法,并且在下一次垃圾回收动作发生时,才真正将该对象占用的内存回收。
发表于 2017-01-06 21:58:36 回复(6)

final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。

  1. final:java中的关键字,修饰符。

     

          1.如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承。因此,一个类不能同时被声明为absrtact抽象类的和final的类。

           2.如果将变量或者方法声明为final,可以保证它们在使用中不被改变.

                     2.1 被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。 

                     2.2被声明final的方法只能使用,不能重载。


  2.  finally:java的一种异常处理机制。

                 

           finally是对Java 异常处理模型的最佳补充。finally 结构使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。特别是在关闭数据库连接这方面,如果程序员把数据库连接的close()方法放到finally中,就会大大降低程序出错的几率。


  3.  finalize:Java中的一个方法名。

         

          Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

     

发表于 2017-05-30 10:46:51 回复(2)
    finally是用于trycatchfinally结构中的,属于必须执行的步骤,内部一般用于释放资源。
但是,当出现断电,System.exit()等情况下也会没有机会执行。
     finalize()方法是Object的方法,用于标记该对象可以被JVM垃圾回收器回收。

发表于 2016-09-09 21:22:57 回复(0)
真服了你们这些复制的,是不是在学校抄作业抄习惯了,面试遇到你们这样的对手真是他妈的爽啊!!!
发表于 2016-08-21 12:34:26 回复(6)
我怎么觉得这是雷锋和雷峰塔的关系,这两个有关系么。求指点
发表于 2017-04-11 18:42:53 回复(0)
finally代码块:是必须执行的代码块,不管是否出现异常,一般我们用于释放资源,比如 io流操作的使用,经常会把关流的方法放在这里执行。
finalize: 是object对象的一个方法,受保护的,如果该对象在栈中没有被引用的话,就只形成一个不可达的对象,这时java的GC垃圾回收机制会去回收该不可达的对象,在回收前回去看看是否重写finalize方法,并且调用该方法。
发表于 2016-12-09 21:48:40 回复(0)
无论是否抛出异常,finally代码块都会执行,它主要是用来释放应用占用的资源。finalize()方法是Object类的一个protected方法,它是在对象被垃圾回收之前由Java虚拟机来调用的。
发表于 2016-03-14 21:15:29 回复(0)
一、性质不同
(1)final为关键字;
(2)finalize()为方法;
(3)finally为为区块标志,用于try语句中;
二、作用
(1)final为用于标识常量的关键字,final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍);
(2)finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作);
(3)finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;
发表于 2017-03-27 16:39:24 回复(0)
这两个东西还能放在一起问?

发表于 2019-07-13 16:48:01 回复(0)

finally一般用在try catch 之后,用来回收资源,无论之前是否出现异常,finally中的代码块都会执行

finalize是在垃圾回收之前会执行的方法,定义在object 类中,可重新来改变回收前需要执行的动作

发表于 2019-05-17 15:13:31 回复(0)
<p>finally是在try catch语句中 finally一定会被执行,一般用于资源释放 释放流等</p><p>fianlize是object类的一个方法,当jvm判断一个对象没有被引用的时候,要对他进行垃圾回收释放内存之前会调用finalize()方法,因为所有类都是object类的子类,所以每个对象都会有finalize方法</p>
发表于 2020-10-27 19:22:32 回复(0)
finally代码块不论try语句块中是否出现异常都会执行,finalize()方法是Object类的一个方法,在对象被回收的时候由JVM执行这个方法。
发表于 2020-07-05 13:21:58 回复(0)
<p>异常处理程序必须执行的部分,垃圾回收程序必须走的方法</p>
发表于 2020-05-27 05:47:01 回复(0)
finally 和 finalize()的关系,与蔺相如和司马相如的关系差不多
发表于 2020-04-10 13:12:21 回复(0)
finalize 垃圾回收机制中,拯救当前内存不被回收的方法;finally 异常处理机制中与try-catch一起使用,不论有没有异常,finally一定会被执行
发表于 2020-03-25 11:13:17 回复(0)
finally只能用于try catch后面,表示 不管是否抛出异常都会执行该代码,一般作用是释放资源,例关闭流
发表于 2019-11-23 01:44:12 回复(0)
final是一种修饰符,被finla修饰的变量会成为常量,不可以被改变,方法不能被重写,类不能被继承
finally是在try catch中使用,无论会不会有异常,finally里的代码都会被执行
finalize()是object类中的一个方法,在垃圾回收时,将要被垃圾回收的对象会调用finalize()方法,并在下一次垃圾回收中被回收
发表于 2019-09-11 14:50:16 回复(0)
(1)final为关键字; (2)finalize()为方法; (3)finally为为区块标志,用于try语句中
发表于 2019-04-30 22:22:04 回复(0)
无论是否抛出异常,finally代码块都会执行,它主要是用来释放应用占用的资源。finalize()方法是Object类的一个protected方法,它是在对象被垃圾回收之前由Java虚拟机来调用的。
发表于 2019-04-27 21:10:22 回复(0)
Exception对象会在下一个垃圾回收过程中被回收掉。
发表于 2019-04-27 19:52:20 回复(0)