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之间的关系
#面向对象和面向过程有什么区别
#彻底区分:基本数据类型、引用数据类型和包装类型
#值传递和引用传递的区别
相关推荐
lang201509283 分钟前
20 Byte Buddy 深度解析:零依赖架构与高级参数注入艺术
java
工边页字3 分钟前
LLM 系统设计核心:为什么必须压缩上下文?有哪些工程策略
前端·人工智能·后端
shark_chili5 分钟前
G1垃圾回收器:原理详解与调优指南
后端
Memory_荒年7 分钟前
Java内存模型(JMM):别让你的代码在“马”路上翻车!
java·后端
Memory_荒年9 分钟前
虚拟线程:让Java轻功水上漂,告别“线程体重焦虑”
java·后端
重庆穿山甲15 分钟前
身份证照片自动裁剪(OpenCV 四边形检测 + 透视矫正)
前端·后端
跟着珅聪学java15 分钟前
Electron + Vue 现代化“新品展示“和“快捷下单“菜单
开发语言·前端·javascript
泡沫_cqy15 分钟前
Java初学者文档
java·开发语言
是晴天呀。25 分钟前
火山引擎接入项目
java·火山引擎