final、finally、finalize三者的区别

在Java学习中遇到了三个关键字,final、finally、finalize,下面我来介绍一下它们的区别。

final

用于修饰类、成员变量和成员方法。final修饰的类,不能被继承(String、StrngBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写,所以不能同时用abstract和final修饰(abstract修饰的是抽象类,抽象类是用于被子类继承的,并且需要重写,和final起相反的作用);final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法;final修饰的成员变量是不可变的,如果成员变量是基本数据类型,初始化之后成员变量的值不能被改变,如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的对象,但是对象中的内容(属性)是允许改变的。

finally

finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是否发生都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,可以放在finally块中。一般程序设计到 I/O流 、数据库的连接 、其它资源连接时。需要关闭资源通道时我们会在finally语句块中释放资源。可以省略不写。

finalize

finalize是方法名,java技术允许使用finalize()方法,在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象进行调用,它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象进行调用。
finalize是Object的方法(垃圾回收器),这个方法是一个空方法,当你需要调用此方法是,需要子类去重写此方法,可以把需要释放的资源放进去。垃圾回收器什么时候回收对象是不确定的。即该方法执行的时间不确定。所以在程序中很少使用。

try…catch…finally结构的语法格式
Try
{
可能会出现异常的代码段
}
Catch(异常类名 处理该异常对象)
{
异常处理代码段
}
finally
{
总是需要执行的代码段
}

希望多多交流,多多关注,共同成就梦想

猜你喜欢

转载自blog.csdn.net/zhangzhanbin/article/details/111651958
今日推荐