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之间的关系
#面向对象和面向过程有什么区别
#彻底区分:基本数据类型、引用数据类型和包装类型
#值传递和引用传递的区别
相关推荐
白鲸开源11 分钟前
Apache SeaTunnel Zeta Engine 的 Basic Auth 是怎么工作的?
java·vue.js·github
妙码生花13 分钟前
从 PHP 到 AI + Golang,程序员自救转型手记(八):设计管理员模型、热重载配置
前端·后端·go
白鲸开源15 分钟前
一文读懂DolphinScheduler插件机制:如何轻松扩展任务类型与数据源
java·架构·github
ServBay20 分钟前
拒绝当二等公民,Windows 开发者如何无痛开启 Claude Code 本地全栈运维?
后端·ai编程·mcp
用户342323237631733 分钟前
从数据源到仪表盘——全链路端到端实战整合
后端
Apifox1 小时前
从 Postman 迁移到 Apifox:Workspace、Collection、Environment 现在可以一起导入了
前端·后端·程序员
用户7713970207062 小时前
深入解析 C# Path.ChangeExtension:原来改扩展名可以这么简单
后端
zimoyin3 小时前
深入理解 Kotlin 协程:从零实现一个 IO 优先 + 虚拟线程溢出的混合调度器
后端
雨落倾城夏未凉3 小时前
第四章c#方法-参数数组和可选参数(16)
后端·c#