Java中 final、finally、finalize 有什么区别?

简介: 本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。

1、典型回答

final、finally、finalize 是 Java 中三个不同的关键字,它们除了长得像之外,其他的(作用和含义)完全不同。

它们三个的区别就好像:雷、雷锋、雷峰塔之间的区别。(是三个完全不同的东西)

final、finally、finalize的区别如下:

  1. final:表示不可变性,用于修饰类、方法和变量 ,当用于类时,表示该类不能被继承;当用于方法时,表示该方法不能被子类重写(覆盖);当用于变量时,表示该变量的值不能被修改(成为常量)。final 关键字提供了不可变性的特性,用于约束一些不希望被修改或继承的类、方法和变量
  2. finally:用于定义在 try-catch 结构之后的一个代码块。无论是否有异常抛出,finally 块中的代码都会被执行。它通常用于释放资源或执行一些必须在代码块结束时执行的清理工作,例如关闭数据库连接、释放文件锁等
  3. finalize:Object 类的一个方法,用于在对象被垃圾回收之前执行一些清理工作。Java 允许在对象被垃圾回收之前执行特定的操作,finalize方法就提供了这样的机制。但需要注意的是,由于垃圾回收的时机是不确定的,finalize方法的执行时间也是不确定的,因此一般不推荐使用 finalize 方法,并且在 JDK 9 开始被标记为 deprecated(弃用)。

所以,final 是用于修饰类、方法和变量,表示不可变性;finally保证关键代码块无论是否捕获到异常,都会被执行;finalize是Object 类的方法,用于在对象被垃圾回收之前进行清理

2、全面剖析

final用于修饰类、方法和变量,具体使用如下:

public static final String USERNAME = "一曲无忧";

finally 用于定义在 try-catch 结构之后一定会执行的代码块,具体使用如下:

​​​​​​​

finalize 是 Object 类的一个方法,用于在对象被垃圾回收之前执行一些清理工作,具体使用如下:

3、知识扩展

3.1、被 final 修饰的变量具有哪些好处?

  1. 不可变性:final修饰的变量在初始化之后就不能再被修改。这样可以确保变量的值始终保持不变,避免了意外或不必要的修改,提高代码的可靠性和可维护性
  2. 安全性:被 final 修饰的变量是不可变的,因此它在多线程环境下是线程安全的
  3. 性能优化:由于 final 变量的值不可变,编译器在编译时就可以进行一些优化,如在循环中提前计算表达式的结果、缓存变量值等,从而提高程序的运行效率
  4. 不存在可见性问题:被 final 修饰的变量具有强有力的可见性保证。当一个线程在写 final 变量时,其他线程将会立即看到该变量的最新值,而不会出现脏读或可见性问题
  5. 代码可读性和维护性:通过使用 final 修饰变量,可以明确地表示变量是一个常量,不应该被修改。这能够提高代码的可读性,让其他开发人员更容易理解和维护代码

3.2被 final 修饰的变量属性,在创建时必须要赋值么

被 final 修饰的变量可以有两种赋值方式:

  1. 创建时直接赋值
  2. 在构造方法中进行赋值

如果不满足以上任意一个条件,则程序会报编译错误

因此,被 final 修饰的变量,在创建时可以不用赋值,在构造方法中赋值,程序依然可以正常运行

目录
相关文章
|
1天前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
11 1
|
2天前
|
Java
Java中抽象类和接口有什么区别?
本文阐述了Java中抽象类和接口的区别,包括类型扩展、方法/属性访问控制符、方法实现、使用目的等方面的不同,并提供了抽象类和接口的使用示例,以及Java中其他类型的类(普通类、内部类等)的简介。
6 0
Java中抽象类和接口有什么区别?
|
2天前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
15 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
11天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
22 4
|
1天前
|
安全 Java 编译器
了解final关键字在Java并发编程领域的作用吗?
【10月更文挑战第8天】在Java并发编程中,`final`关键字具有重要作用,包括保证变量的可见性和不可变性,防止对象引用被意外修改,并帮助编译器优化读取操作及消除不必要的同步。通过确保变量不可变,`final`增强了多线程环境下的安全性与性能。
|
10月前
|
Java
【零基础学Java】—final关键字与四种用法(二十九)
【零基础学Java】—final关键字与四种用法(二十九)
|
5月前
|
Java
Java中final关键字(看这篇就够了)
Java中final关键字(看这篇就够了)
49 0
|
3月前
|
Java
Java面向对象 ( 多态 | final关键字 | 接口 )
Java面向对象 ( 多态 | final关键字 | 接口 )
|
4月前
|
Java
java之final关键字
java之final关键字
|
4月前
|
Java 编译器
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(二)
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(二)
29 0
Java基础5-一文了解final关键字的特性、使用方法,以及实现原理(二)