final,finally &finalize的区别学习理解

本文深入解析Java中final, finally及finalize的区别与应用。final作为关键字,用于修饰类、对象、属性、方法和变量,赋予只读特性;finally在异常处理中确保代码无条件执行,常用作资源释放;finalize()是Object方法,由垃圾回收器调用以释放资源。
摘要由CSDN通过智能技术生成

final,finally &finalize的区别学习理解

final

  • final是一个关键字,修饰符。它可以修饰类、对象、属性、方法和变量。

  • 修饰类时,该类就成为一个最终类,不能被继承,java中已提供的很多类都被声明为final类,不可进行继承。

  • 修饰对象时,该对象的应用就不可再次进行修改,但不影响对对象的属性进行操作。

  • 修饰属性时,表示该属性只能读取,不能修改,final属性定义时可以不进行初始化,但必须在初始化块或者构造函数中进行初始化,final修饰的变量必须确保使用时被初始化过。

  • 修饰方法时,这个方法可以被子类继承,但不可被重写。

  • 修饰变量时,该变量就相当于一个常量,其不可被再次赋值。

概括总结来说final修饰“对象”,是给该“对象”赋予了一种只读特性,只能对其进行使用操作而不能进行修改的操作(其中类不能被继承,对象不可修改引用,对象属性不受限制,方法不可被重写)

finally

finally是java异常处理中的一个重要部分,在对异常进行捕获处理之后,finally块的内容将被无条件执行执行。

try{
	...
}catch(){
	...
}finally{
	...
}

其使用结构如上,理论上来说不论是否发生异常,finally块是一定会被执行的,但学习中发现有不同的看法,总结其情况如下:

  1. 程序没有执行try块导致的finally块没被执行。这里我觉得可以解释一下,finally块是在异常处理中与try块配合使用的,而如果没有进行异常捕获,也就是没有执行到try块,那么与之对应的finally块不执行是很正常的。
  2. 程序执行了try块,但在执行过程中虚拟机退出而导致的finally块没被执行。这我觉得没必要解释了,虚拟机都停止了程序不再执行也是正常情况。

总结来说,只要程序执行了try块,并且没有发生特殊情况,即正常执行完了try块或者执行完了某个catch块,那么finally块都将被执行。其中在没有发生异常,即正常执行完try块后再执行finally时,如果return语句在finally块之前,finally块会执行且其中的操作不会影响return的返回值,如果return语句在最后则finally块正常执行且可以影响return的值。另外实际中finally块常被用来进行资源释放,例如关闭流、连接等的操作。

finalize

finalize()是object的一个方法,是在垃圾收集器在对象不再被引用的情况下被调用的,用来进行资源的释放。finalize方法可以主动调用,但是并没有什么用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值