天天看点

final、 finally、 finalize

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在这些转移语句执行前执行;即在         转移之前回收资源;