java面试系列 基础篇二

final、finally、finalize的区别

final

final是java的一个关键字,可以用来修饰java中的类、方法和变量(包括成员变量和局部变量)。
final修饰类时,表明该类不可以被继承,如java中String类就是final类型的类,不可被别的类继承。

final类中所有的成员方法都会隐式的定义为final方法。
final修饰方法时,表明该方法不能被重写,final修饰方法主要有两个目的:

  1. 锁定方法,避免继承关系对该方法进行修改
  2. 提高效率,在早期的java版本中,会将final方法转为内嵌调用。但若方法过于庞大,可能在性能上不会有多大提升。因此在最近版本中,不需要final方法进行这些优化了。

若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,因此,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新地定义了新方法。

final修饰变量,表示该变量在赋值后不可进行修改的。
final修饰基础数据类型时,表明该数据在初始化后不可更改;final修饰引用类型时,在初始化引用对象后,表明该引用类型指向的对象不可更改,但是对象内容可以更改。
final修饰成员变量时,该成员在初始化后就不能被修改。成员变量的初始化可以在声明时进行初始化,也可以在构造函数中进行初始化。
final修饰方法参数名时,表明该参数只能被读取,不能对参数的值进行修改

finally

finally是try-catch异常捕获机制中的一个语句块,表明在try-catch生效的情况下,finally语句块一定会被执行。但是也存在某些情况,即使try-catch生效了,finally也不会执行,如在try中或者catch中执行类似于关闭虚拟机或者造成try-catch被中断或者阻断时,finally也不会被执行

try-catch-finally中return的执行顺序
如果finally中无return语句,则程序会在执行完finally中的内容后,再执行try-catch中的return语句;如果finally中有return语句,则会直接返回finally中的return语句

finalize

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,所有类都有这么一个方法。这个方法在gc启动,该对象被回收的时候被调用(其实gc可以做到大部分的对象回收,因此程序员基本不需要考虑去实现finalize方法)。

特殊情况下,需要程序员实现finalize,当对象被回收的时候释放一些资源,比如:一个socket链接,在对象初始化时创建,整个生命周期内有效,那么就需要实现finalize,关闭这个链接。
  使用finalize还需要注意一个事,调用super.finalize();

一个对象的finalize()方法只会被调用一次,而且finalize()被调用不意味着gc会立即回收该对象,所以有可能调用finalize()后,该对象又不需要被回收了,然后到了真正要被回收的时候,因为前面调用过一次,所以不会调用finalize(),产生问题。 所以,推荐不要使用finalize()方法,它跟析构函数不一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值