(十一)、final,finally,finalize的区别

首先,这三者一点关系都没有。

final

对于我们来说final是很基础的关键字。final可以用来修饰类、方法、变量。

1.final修饰的class,代表不可继承扩展。

2.final修饰的方法是不可以重写的。

3.final修饰的变量是不可以修改的。

  这里所谓的不可修改对于基本类型来说,的确是不可以修改。而对于引用类型来说,只能说不能重新赋值,也就是不能改编引用地址。但是作为引用类型,它内部所包含的内容如果不是final则可以随意修改。

4.final声明的变量需要显示的给它赋初始值。如何赋值?直接赋值或在构造函数里赋值,对于编译的.class文件是等价的。

final int num;
final int num2 = 666;
public Test(){
    num = 666;
}

finally

finally 则是Java保证重点代码一定要被执行的一种机制。最常用的地方:通过try-catch-finally来进行类似资源释放、保证解锁等动作。

finally在try,catch中可以有,可以没有。如果trycatch中有finally则必须执行finally快中的操作。一般情况下,用于关闭文件的读写操作,或者是关闭数据库的连接等等。

try{
    ...
}catch(){
    ...
}finally{
    ...
}

这里提一点,try-finally也是可以的。不过这里个人不建议省略掉catch。

什么情况下finally不执行?当然是程序停止啊。

try{
    System.exit();
}finally{
    System.out.println("程序都死了,finally当然不执行了。")
}

finalize

finalize这个是方法名。在java中,允许使用finalize()方法在垃圾收集器将对象从内存中清理出去之前做必要的清理工作。

说实话,我们日常开发中finalize用的并不多,而且也不被推荐使用。甚至在Java9中,明确将Object.finalize()标记为deprecated!

关于finalize说白了,它设计之初的作用就是:在CG要回收某个对象时,让这个对象有底气的大喊一声:“报告,我还能再抢救一下!”。但是也正是因为如此,JVM要对它进行额外处理。finalize也就成为了CG回收的阻碍者,也就会导致这个对象经过多个垃圾收集周期才能被回收。

参考文章:https://baijiahao.baidu.com/s?id=1611915475314303885&wfr=spider&for=pc 

很想高飞,但我不能;不想天空,剩我一人。
原文地址:https://www.cnblogs.com/lixiansheng/p/11299774.html