关于final、finalize、finally的区别

关于final、finalize、finally的区别

笔试讲解:

final 修饰变量、方法和类的修饰符。如果修饰变量,则该变量值不可变。
finalize 是对象被回收前调用的方法,当对象标记且回收执行,还能再次复活。
finally try catch 一起用,用于异常处理。finally一定会执行,无论在在try中是否有异常。

面试细讲:

final是修饰用的关键词,修饰变量表示该变量不能被修改,修饰类时表示该类不能被继承,修饰方法时表示该方法不能在子类被重写;
finalize()定义的是方法,用在一些垃圾回收无法照顾到的特殊场合,如本地方法使用C语言的malloc()申请了内存,此时JVM的垃圾回收无法回收这部分内存,则可以使用finalize(),在方法体中用C语言的free()来释放这部分内存,当垃圾回收发生时,将首先调用finalize()中的代码;
finally子句一般用在try的异常处理语句块后,不管try语句块执行时是否抛出了一个异常,finally子句的代码都会被执行,同时finally子句也可以用在break、continue之后,或者用在return语句之后,其功能都是:保证finally子句中的代码一定会被执行。

小试牛刀一:

final、finally、finalize三个关键字的区别是()
final是修饰符(关键字)可以修饰类、方法、变量
finally在异常处理的时候使用,提供finally块来执行任何清除操作
finalize是方法名,在垃圾收入集器将对象从内存中清除出去之前做必要的清理工作
finally和finalize一样都是用于异常处理的方法

正确答案:A B C
解析:

final:可用来定义变量、方法传入的参数、类、方法。
finally:只能跟在try/catch语句中,并且附带一个语句块,表示最后执行。
finalize:是垃圾回收器操作的运行机制中的一部分,进行垃圾回收器操作时会调用finalize方法,因为finalize方法是object的方法,所以每个类都有这个方法并且可以重写这个方法,在这个方法里实现释放系统资源及其他清理工作,JVM不保证此方法总被调用。
答案:ABC

小试牛刀二:

final、finally和finalize的区别中,下述说法正确的有?
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如关闭文件等。
引用变量被final修饰之后,不能再指向其他对象,它指向的对象的内容也是不可变的。
正确答案:A B

解析:
选AB
A,D考的一个知识点,final修饰变量,变量的引用(也就是指向的地址)不可变,但是引用的内容可以变(地址中的内容可变)。
B,finally表示总是执行。但是其实finally也有不执行的时候,但是这个题不要扣字眼。

  1. 在try中调用System.exit(0),强制退出了程序,finally块不执行。
  2. 在进入try块前,出现了异常,finally块不执行。
    C,finalize方法,这个选项错就错在,这个方法一个对象只能执行一次,只能在第一次进入被回收的队列,而且对象所属于的类重写了finalize方法才会被执行。第二次进入回收队列的时候,不会再执行其finalize方法,而是直接被二次标记,在下一次GC的时候被GC。
    放一张图吧在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值