Java基础:final、finally、finalize的区别
一、背景。
这篇文章主要介绍了final、finally、finalize的区别详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。放假在家里休息,闲来无事,想巩固巩固自己的基础知识。Java基础这个我会一直更新的,希望大家关注 收藏 点赞。
二、final、finally、finalize。
1.总体区别。
final 是java中的关键字,表示这部分是“不可修改的”。使用final可以修饰:变量、方法、类。表示变量不可变,方法不可以被覆盖,类不可以被继承。
finally 是java中异常处理结构的一部分,表示这段代码总会被执行。
finalize() 表示是object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。允许回收此前未回收的内存垃圾。所有object都继承了finalize()方法。
2.final详解。
一旦将变量设置成final,则不能更改final变量的值(可以把它当作常量)
当final修饰的是一个基础数据类型时,则该基础数据类型一旦在初始化之后就不能再发生变化;当final修饰的是引用数据类型时,则在其被初始化之后,就不能再指向其他对象了,但是它指向的对象的内容还是可以发生变化的,此时final修饰的引用变量不可变,引用变量的值是指向的地址,即地址的值不变,而地址中的类是可以变化的。
被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。
将方法声明为final,可以保证他们在使用的过程中不被修改。被final声明的方法也同样只能使用,即不能方法重写。
关于final的几个注意事项:
- a、final变量必须在声明的时候初始化或是在构造函数中初始化;
- b、接口中声明的所有变量都是final的;
- c、final,finally,finalize的区别。final表示不可变,final表示必须执行的语句,finalize表示垃圾回收时执行的代码。
3.finally详解。
finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是否发生,都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。
补充:finally和return的执行顺序:
当try{}里面出现return语句时,后面的finally是否会被执行呢?答案是会,而且是先执行finally语句,再执行return语句。因为return表示整个方法体返回,所以finally一定在这之前就已经执行了。
但是,对于finally语句中,对数据的修改,数据是引用类型还是值类型,效果是不同的。
4.finalize详解。
finalize是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
三、总结。
问题解决了,心情就舒服多了,就像bug一样,解决的bug愈多,能力和经验就会增加,但是一旦没有得到合理的解决,嘴里的肉就不香了!
小编会持续输出更多干货文章来回报大家的。