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之间的关系
#面向对象和面向过程有什么区别
#彻底区分:基本数据类型、引用数据类型和包装类型
#值传递和引用传递的区别
相关推荐
都叫我大帅哥5 分钟前
🌊 Redis Stream深度探险:从秒杀系统到面试通关
java·redis
都叫我大帅哥6 分钟前
Redis持久化全解析:从健忘症患者到记忆大师的逆袭
java·redis
程序猿阿越25 分钟前
Kafka源码(一)Controller选举与创建Topic
java·后端·源码
-凌凌漆-25 分钟前
【Qt】QStringLiteral 介绍
开发语言·qt
程序员爱钓鱼25 分钟前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
程序无bug30 分钟前
Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步
java
二川bro33 分钟前
飞算智造JavaAI:智能编程革命——AI重构Java开发新范式
java·人工智能·重构
Jiude41 分钟前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构
Q_970956391 小时前
java+vue+SpringBoo校园失物招领网站(程序+数据库+报告+部署教程+答辩指导)
java·数据库·vue.js