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.youkuaiyun.com/jim_007/article/details/54017221
版权声明:本文为博主原创文章,转载请附上博文链接!