final, finally, finalize 的区别
Posted goodbye-lazy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了final, finally, finalize 的区别相关的知识,希望对你有一定的参考价值。
final:
在java中,final可以用来修饰类,方法和变量(成员变量或局部变量)
1、final类中所有的成员方法都会隐式的定义为final方法。
2、若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,因此,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新地定义了新方法。
3、final成员变量表示常量,只能被赋值一次,赋值后其值不再改变。类似于C++中的const。
4、final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式:
一种是在变量声明的时候初始化;
第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。
finally:
1、只有与finally对应的try语句块得到执行的情况下,finally语句块才会执行。
2、在 try 语句块中执行了 System.exit (0) 语句,终止了 Java 虚拟机的运行,不会执行finally语句块
3、当一个线程在执行 try 语句块或者 catch 语句块时被打断(interrupted)、被终止(killed)、突然死机或者断电,都不会执行finally语句块
4、finally块的语句在try或catch中的return语句执行之后返回之前执行,finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally里也有return语句则覆盖try或catch中的return语句直接返回。
finalize :
finalize()是在java.lang.Object里定义的,这个方法在gc启动,该对象被回收的时候被调用,一般是不需要程序员去实现finalize的;
特殊情况下,需要程序员实现finalize,当对象被回收的时候释放一些资源,比如:一个socket链接,在对象初始化时创建,整个生命周期内有效,那么就需要实现finalize,关闭这个链接。
使用finalize还需要注意一个事,调用super.finalize();
一个对象的finalize()方法只会被调用一次,而且finalize()被调用不意味着gc会立即回收该对象,所以有可能调用finalize()后,该对象又不需要被回收了,然后到了真正要被回收的时候,因为前面调用过一次,所以不会调用finalize(),产生问题。 所以,推荐不要使用finalize()方法
以上是关于final, finally, finalize 的区别的主要内容,如果未能解决你的问题,请参考以下文章