当前位置: 首页 > article >正文

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愈多,能力和经验就会增加,但是一旦没有得到合理的解决,嘴里的肉就不香了!

小编会持续输出更多干货文章来回报大家的。

http://www.lryc.cn/news/2415195.html

相关文章:

  • 数据库中的数据类型
  • 确定最佳聚类的算法(一)
  • HLS新手入门教程
  • gerber导出文件解析,二十几个文件都是干什么的
  • ztree使用总结
  • 虚拟运行环境管理工具Vagrant详细使用教程
  • XXXX is not translated in en (English), zh (Chinese)
  • 什么是业务? 编程语言范畴中谈到的业务是什么
  • 全球免费公共DNS解析服务器 |解决无法上网+加速+防劫持
  • 多线程之pthread_create()函数
  • 《第十五章 异常处理 - try-catch 语句》
  • 字符分割函数strtok
  • 计算机组成原理_浮点数的定义
  • 什么是阻抗?
  • Mssql手工注入
  • sda、sdb、sda1、sda2的意思
  • 详细介绍 CVS (附带 其配置与使用方法)
  • JDK的下载安装及配置(包含多个JDK)
  • Solr的源代码解析和开发技巧
  • 口碑超好的五款桌面管理软件|桌面管理软件排行榜
  • CKEditor5导入并解析word功能的集成,实现word转html
  • 进阶注解处理器 processor (三)
  • IP、子网、超网(CIDR)、网段知识讲解
  • ixp协议服务器,ipx协议中的“内部网络号”是什么意思?
  • C语言—strcpy,strncpy函数介绍、以及自己实现字符串的拷贝代码演示
  • 深度剖析 Go 的 nil
  • 什么是哈希算法sha2?和sha1什么区别?SHA2代码签名?sha3又是什么?
  • Linux C语言运行库 glibc
  • YOLOv5输入端(一)—— Mosaic数据增强|CSDN创作打卡
  • AS2安全基础知识