面试题:final、 finally、 finalize的区别

    xiaoxiao2022-07-03  117

    final: 最终的,最后的,决定性的,不可改变的; 这个词在java里中文意思比较偏重于“不可改变的”,比如说:“长跑比赛final结果”,就是说比赛的结果是不可改变的,在踩终点线前,你还可以改变,可以逆袭从最后一名变成第一名,但踩线后结果出来是啥样就是啥样,不可改变; finally:这个是副词,可以修饰动词;java中修饰的就是动词try; 例句: after several delays,he finally caught up with them; 几经耽搁,他最终追上了他们; finalize: 这个是动词,用在java垃圾回收中,比较好区分;

    final修饰类

    基于上述final字面意思,final有如下特性:

    1、final+类,这个类不能被继承;若能继承就能改变类里方法,很显然跟final的字母意思冲突,所以不能继承;

    2、final+类,类里的所有方法默认都是final方法;

    final修饰变量

    1、final+一般变量: 该变量一旦被初始化,便不能被修改; 2、final+引用类型变量:该变量一旦被初始化,便不能指向指向另一个对象;

    final修饰方法

    使用“final+方法”的原因:

    1、把方法锁定,以防任何继承类修改它的含义;

    2、早期java方法中,会将final方法转为内嵌调用,以提升性能效率,但不怎么理想,现在不这样用了;

    finally的存在意义

    finally是堆异常处理的一种补充,为异常处理事件提供一个处理机制:一般用来关闭文件或释放其他系统资源; 比如下面的框架:你开了一个流处理文件,可能成功了,也可能没成功,但不管怎样你都得把数据流给关闭,于是就在finally里给关了;

    Try{… …创建数据流}

    catch(Exception e){… … 数据流还在 }

    finally{ … …关闭数据流 }

    若不用finally,若程序复杂,得在多处关闭数据流,还得组织结构等,比较麻烦;

    Try{… …创建数据流}

    catch(Exception e1){… … 关闭数据流;throw e1;}

    catch(Exception e2){… … 关闭数据流;throw e2;}

    catch(Exception e3){… … 关闭数据流;throw e3;}

    catch(Exception e4){… … 关闭数据流;throw e4;}

    … …

    finally的特性:

    1、只有当它所在的try{… …}语句得到执行时,finally才执行;不管报不报错,你得先“尝试”了才会有个结果;

    2、如果“return … …try{… …}”在try前执行了return,finally不执行;

    如果一个try{…System.exit(0) …}语句中调用System.exit(0)强制终止jvm,finally不执行;

    如果Java虚拟机终止运行时,finally语句块也不会执行;

    3、如果try{…retrun …}、try{… break …}、try{… continue …},那么finally在这些转移语句执行前执行;即在 转移之前回收资源;

    作者:小小梦里花007 来源: 原文:https://blog.csdn.net/jim_007/article/details/54017221 版权声明:本文为博主原创文章,转载请附上博文链接!

    最新回复(0)