final、finally、finalize的区别
1、final修饰符(关键字)。
被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,可以保证他们在使用的过程中不被修改。被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。被final声明的方法也同样只能使用,即不能方法重写。
【例】
public class finalTest{
final int a=6;//final成员变量不能被更改
final int b;//在声明final成员变量时没有赋值,称为空白final
public finalTest(){
b=8;//在构造方法中为空白final赋值
}
int do(final x){//设置final参数,不可以修改参数x的值
return x+1;
}
void doit(){
final int i = 7;//局部变量定义为final,不可改变i的值
}
}
2、finally
是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是否发生,都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。
3、finalize是方法名。
java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
final、finally、finalize区别
Final用于修饰类、成员变量和成员方法。final修饰的类,不能被继承(String、StringBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写,所以不能…
final
用于声明属性、方法和类。但是final不可以用来修饰类和接口
分别表示属性不可变,方法不可覆盖,类不可继承。
如果一个类被声明为final,就意味着他不能再派生新的子类,不能作为父类被继承。所以说一个abstract类的抽象类,是不可以被final来修饰的。
如果final修饰的是一个变量,如果变量是基本数据类型,那么这个变量被赋予的取值是不可以被改变的,所以就是一个常量。如果final修饰的变量是一个对象,那么变量里保存的引用(可以理解为保存的对象在内存中的地址),是不可以被改变的。
final修饰的方法,不能被子类override。但是可以被子类所继承
finally
是异常处理结构的一部分,表示总是执行。
try/catch语句中
finally里的代码总会执行,不管是否有异常发生,如果把关闭连接的操作放在finally里面,保证资源都是可以被关闭掉。
finalize
是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。
在对象被从内存中清理出去之前,做必要的清理工作。