final、finally、finalize的区别

1.是什么

finalfinally、和finalize是Java中三个容易混淆但功能完全不同的关键字或方法。下面我将详细解释它们之间的区别,并通过例子来说明。


1. final

final是一个修饰符,它可以用来修饰类、方法和变量。

  • 修饰类:表示该类不能被继承。
  • 修饰方法:表示该方法不能被子类重写。
  • 修饰变量:表示该变量的值一旦被初始化之后就不能被改变(对于基本数据类型)或者该变量的引用一旦指向某个对象之后就不能再指向其他对象(对于对象引用)。

例子

java 复制代码
final class FinalClass {  
    // FinalClass不能被继承  
}  
  
class MyClass {  
    final void finalMethod() {  
        // finalMethod不能被重写  
    }  
  
    final int finalVariable = 10; // finalVariable的值不能改变  
}

2. finally

finally是一个块,它通常与try-catch语句一起使用,无论是否捕获到异常,finally块中的代码都会被执行。它主要用于执行清理代码,如关闭文件流、释放资源等。

例子

java 复制代码
try {  
    // 尝试执行的代码块  
    // 可能会抛出异常的代码  
} catch (Exception e) {  
    // 捕获异常并处理的代码块  
} finally {  
    // 无论是否捕获到异常,finally块中的代码都会被执行  
    // 用于执行清理工作,如关闭文件流等  
}

3. finalize

finalizeObject类的一个方法,它在垃圾收集器决定销毁对象之前被调用。它用于执行清理操作,如释放非内存资源。但是,需要注意的是,finalize的调用是不确定的,且从Java 9开始,finalize方法已被标记为过时(deprecated),并可能在未来的版本中完全移除。因此,建议避免使用finalize方法,而是使用try-with-resources语句或java.lang.ref.Cleaner等现代资源管理机制。

注意 :由于finalize方法通常不推荐使用,这里仅提供一个概念性的说明,而不提供具体的代码示例。


总结:

  1. final:用来修饰变量、方法和类,表示不可更改或继承。
  2. finally:在异常处理过程中,无论是否抛出异常,都会执行的代码块,常用于释放资源。
  3. finalize():在对象被垃圾回收之前被调用的方法,用于清理资源,但已被弃用,不推荐使用。

好啦,今天的干货就到这啦~ 有什么疑问的小伙伴欢迎到评论区留言!


猜你感兴趣的方面:
#强制类型转换是什么?
#自动类型转换有哪些细节???
#JVM、JRE、JDK之间的关系
#面向对象和面向过程有什么区别
#彻底区分:基本数据类型、引用数据类型和包装类型
#值传递和引用传递的区别
相关推荐
qq_31812159几秒前
互联网大厂Java面试故事:从Spring Boot到微服务架构的技术挑战与解答
java·spring boot·redis·spring cloud·微服务·面试·内容社区
计算机毕设VX:Fegn08957 分钟前
计算机毕业设计|基于springboot + vue医院设备管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
txinyu的博客7 分钟前
解析业务层的key冲突问题
开发语言·c++·分布式
J_liaty8 分钟前
Spring Boot整合Nacos:从入门到精通
java·spring boot·后端·nacos
码不停蹄Zzz13 分钟前
C语言第1章
c语言·开发语言
面汤放盐28 分钟前
后端系统设计文档模板
后端
行者961 小时前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon1 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
daidaidaiyu1 小时前
Spring IOC 源码学习 一文学习完整的加载流程
java·spring
SmartRadio1 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble