final、finally、finalize区别
final关键字用法
(1) 修饰类,这个类是终类,不能被继承。
a. final类中的成员变量,可以根据自己的实际需要设计为fianl。
b. final类中的成员方法,都会被隐式的指定为final方法。
(2)修饰方法,被final修饰的方法不能被重写(覆盖)。
a. 一个类的private方法会隐式的被指定为final方法。
b. 如果父类中有final修饰的方法,那么子类不能去重写。
(3)修饰成员变量
a. 必须初始化值。有两种赋值方式:1、直接赋值 2、全部在构造方法中赋初值。
b. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。
c. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。
finally
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块。
只要try中语句执行了,jvm没有被终止(System.exit(0))且线程不被终止,系统不死机断电,
finally中语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。
finalize
finalize()是在Object里定义的,每个对象都有这个方法,当前对象被回收的时候,finalize()被调用。
凡是new出来的对象,gc都回收,一般是不需要程序员去实现finalize的。
[当对象被回收的时候手动释放一些资源,需要程序员实现finalize,比如:一个socket链接,在对象初始化时创建,整个生命周期内有效,那么就需要实现finalize,关闭这个链接。
使用finalize还需要注意一个事,调用super.finalize();
一个对象的finalize()方法只会被调用一次,而且finalize()被调用不意味着gc会立即回收该对象,所以有可能调用finalize()后,该对象又不需要被回收了,然后到了真正要被回收的时候,因为前面调用过一次,所以不会调用finalize(),产生问题。 所以,不推荐使用finalize()方法。]