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之间的关系
#面向对象和面向过程有什么区别
#彻底区分:基本数据类型、引用数据类型和包装类型
#值传递和引用传递的区别
相关推荐
小马爱打代码4 分钟前
Spring源码 第七篇:Spring Boot 自动配置原理深度拆解
java·spring boot·spring
日取其半万世不竭12 分钟前
给 Docker 容器设置 CPU 和内存限制,避免单个服务拖垮整机
java·docker·容器
铁皮哥16 分钟前
【agent 开发】Claude Code 的 Skill 是怎么被加载的?从 name/description 到 SKILL.md 再到资源文件
java·服务器·数据库·python·gitee·github·软件工程
小糯米60122 分钟前
C语言 自定义类型:结构体 与 联合体
c语言·开发语言·数据结构
jieyucx24 分钟前
Go 语言 JSON 序列化与反序列化
开发语言·golang·json·序列化
小小小小宇27 分钟前
Go 语言高并发场景、使用方式与协程通俗讲解
后端
白宇横流学长27 分钟前
基于SpringBoot实现的校园失物招领平台设计与实现【源码+文档】
java·spring boot·后端
罗超驿31 分钟前
6.Java多线程详解:Thread类、线程属性与start()方法深度解析
java·开发语言·面试·java-ee
苦逼的猿宝38 分钟前
IT技术交流和分享平台的设计与实现(源码+论文)
java·毕业设计·springboot·计算机毕业设计
摇滚侠41 分钟前
IDEA 需要修改的配置 开发工具
java·ide·intellij-idea