Java中final、finally、finalize的定义和区别

这三兄弟内容上并没有交集,但是因为长的像,所以常常被放在一起比较。。。。

 

一:final

final是一个关键字,用来声明类、变量和方法。final具有终止的含义。

当用final修饰一个类时,这个类就无法再被继承了,也就是说这个类就到此为止了,它不会再有子类了。

当用final修饰一个变量时,那么这个变量就变成了一个常量,不允许再被重新赋值,所以一个final修饰的变量通常在声明时就给它赋值。

当用final修饰一个方法时,表示这个方法不可被重写,只能够被使用。

 

二:finally

finally通常是搭配Try-Catch使用的,Try-Catch是异常处理机制,首先执行Try里面的代码,如果发生异常就会执行Catch里面的代码,而最后都会执行finally里面的代码,所以可以在finally里面进行一些资源释放操作。

 

三:finalize

finalize是Object中的一个方法,因此每个对象都会有这个方法,对象可以选择重写该方法。finalize()方法主要在进行垃圾回收时会被调用到,具体如下:

(1)当一个对象不再被引用,就会被第一次标记,此时会进行一次判断,如果该对象没有重写finalize()方法或者finalize()方法已经被调用过一次了,对象就打上死亡标记了,等待内存被回收。

(2)如果该对象重写了finalize()方法并且还没有被调用过,这个对象就会被放到一个名为F-Queue的队列中,然后虚拟机会创建一个优先级低的Finalizer线程去执行该队列中对象的finalize()方法。

(3)GC会对F-Queue队列内的对象进行第二次标记,如果在执行finalize()方法期间该对象又被引用了,那么该对象就成功复活了,这一次不会被回收,而其它没有复活的对象则会被第二次标记从而真正死亡了,等待内存被回收。

(4)由于finalize()方法最多只能被调用一次,所以假如一个对象被回收时第一次调用finalize()方法成功复活,那么第二次被回收时就不会再调用finalize()方法了,而是直接死亡等待被回收。

有些人说可以在finalize()方法中做一些释放资源之类的操作,但是这些操作完全可以放到finally中去执行,而且finalize()方法运行消耗的资源很多,所以通常没必要使用finalize()方法。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: final 是一个修饰符,能够用于、变量和方法,表示它们不能被修改或重写。finally是一个关键字,它在异常处理语句使用,表示肯定会被执行的代码。finalize是一个Object的方法,在垃圾收集器准备回收对象时会调用该方法,用于清理资源。 ### 回答2: 在Javafinalfinallyfinalize是三个不同的关键字,具有不同的用途和含义。 1. finalfinal是一个修饰符,用于声明一个不能被继承的、一个不能被重写的方法、或者一个不能被修改的变量。当一个被声明为final时,该不能被其他继承。当一个方法被声明为final时,该方法不能被子重写。当一个变量被声明为final时,该变量的值不能被修改。 2. finallyfinally是一个关键字,用于定义在try-catch语句块的一个代码块,无论是否发生异常,该代码块都会被执行。finally块通常用于释放资源,比如关闭文件、网络连接等。 3. finalizefinalize是一个方法,用于在Java对象被垃圾回收器销毁之前进行一些清理工作。finalize方法的定义在Object,可以被子重写。finalize方法在垃圾回收器准备销毁对象时会被调用,但并不能保证一定会执行,因为垃圾回收是由垃圾回收器自行决定的。 总结: final用于修饰、方法或变量,表示不可继承、重写或修改。finally用于定义在try-catch语句块的一个代码块,无论是否发生异常,都会执行。finalize是一个方法,在Java对象被销毁之前执行一些清理工作,但不能保证一定会被执行。 ### 回答3: 在Javafinalfinallyfinalize是三个不同的概念。 1. finalfinal是一个关键字,可以修饰变量、方法和。当用final修饰变量时,表示该变量的值不可被更改。当用final修饰方法时,表示该方法不可被子重写。当用final修饰时,表示该不可被继承。final主要用于限定对象的状态、行为或结构的不可改变性。 2. finallyfinally也是一个关键字,用于定义在try-catch结构的一个代码块。无论try块是否发生异常,finally的代码都会被执行。通常用finally来释放资源、关闭文件、数据库连接等必要的清理操作。 3. finalizefinalize()是一个方法名,属于Object的一个方法,用于Java的垃圾回收机制。当一个对象变成垃圾,即没有任何引用指向该对象时,垃圾回收器会在适当的时机调用该对象的finalize()方法,进行资源释放和清理操作。但是,由于finalize()方法的执行时机不确定,并且Java8已经不鼓励使用finalize()方法,因此一般不建议使用该方法。 总结:final表示不可改变性,finally表示无论是否发生异常都会执行的代码块,而finalize是垃圾回收器在释放对象时调用的方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值