Java中final、finally、finalize的区别

1、final

final关键字可以用于类、方法、变量前,* 用来表示该关键字修饰的类、方法、变量具有不可变得特性。

1-1、final修饰变量

final关键字用于基础数据类型前:这时表明关键字修饰的变量是一个常量,在定义该变量的值就不能被修改

1-2、final修饰方法

final关键字用于方法声明前:该方法只能被调用、不能被覆盖,但是可以被重载.

1-3、final修饰类

final关键字用于类声明前:该类不能被其他类所继承,
注意:final类中所有的成员方法都会隐士的定义为final方法

2、finalize()

finalize()是在Object类中定义的,也就是每一个对象都有这个方法,这个方法在gc启动,
该对象回收的时候被调用,特殊情况下,需要程序员自己去实现finalize,当对象被回收时去释放一些资源。
如:socket连接,在对象初始化创建,整个生命周期内有效,那么就需要实现finalize来关闭这个连接。

3、finally

在异常处理时提供finally块来执行任何清除操作时,如果抛出一个异常,那么相配的catch
子句就会执行,然后控制就会进入finally块(如果有的话).
举例:
假如我们打开了一个文件,但在处理文件过程中发生异常,这时文件还没有被关闭,
此时就会产生资源回收问题。对此,java提供了一种好的解决方案,
那就是finally子句,finally子句中的语句是一定会被执行的,
所以我们只要把前面说的文件关闭的语句放在finally子句中无论在读写文件中是否遇到异常退出,
文件关闭语句都会执行,保证了资源的合理回收。