final: 最终的,最后的,决定性的,不可改变的;
这个词在java里中文意思比较偏重于“不可改变的”,比如说:“长跑比赛final结果”,就是说比赛的结果是不可改变的,在踩终点线前,你还可以改变,可以逆袭从最后一名变成第一名,但踩线后结果出来是啥样就是啥样,不可改变;
finally:这个是副词,可以修饰动词;java中修饰的就是动词try;
例句: after several delays,he finally caught up with them; 几经耽搁,他最终追上了他们;
finalize: 这个是动词,用在java垃圾回收中,比较好区分;
------------------------------------------------------------final-------------------------------------------------------------------------------
final修饰类
基于上述final字面意思,final有如下特性:
1、final+类,这个类不能被继承;若能继承就能改变类里方法,很显然跟final的字母意思冲突,所以不能继承;
2、final+类,类里的所有方法默认都是final方法;
final修饰变量
1、final+一般变量: 该变量一旦被初始化,便不能被修改; 2、final+引用类型变量:该变量一旦被初始化,便不能指向指向另一个对象;
final修饰方法
使用“final+方法”的原因:
1、把方法锁定,以防任何继承类修改它的含义;
2、早期java方法中,会将final方法转为内嵌调用,以提升性能效率,但不怎么理想,现在不这样用了;
---------------------------------------------------------finally----------------------------------------------------------------------------------
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----------------------------------------------------------------------------------
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在这些转移语句执行前执行;即在 转移之前回收资源;