final关键字详解与final,finally,finalize的区别

2023-12-13 06:34:38

1. final关键字

1. 修饰变量

如果一个变量被声明为 final,那么它的值就不能被修改。例如:

final int a = 10; // 定义常量a,其值不能被修改

在上面的例子中,变量 a 被声明为 final,其值不能被改变。

2. 修饰方法

如果一个方法被声明为 final,那么它不能被子类重写(override)。例如:

public class Parent {
    public final void foo() {
        System.out.println("Parent foo");
    }
}

public class Child extends Parent {
    // 编译错误,无法重写final方法
    public void foo() {
        System.out.println("Child foo");
    }
}

在上面的例子中,Parent 类中的 foo() 方法被声明为 final,所以在 Child 类中无法重写该方法。

3. 修饰类

如果一个类被声明为 final,那么它不能被继承。例如:

public final class MyClass {
    // ...
}

// 编译错误,无法继承final类
public class MySubClass extends MyClass {
    // ...
}

在上面的例子中,MyClass 类被声明为 final,所以无法被其他类继承。

4. final的作用

使用 final 可以保证变量、方法和类的不可变性,从而增加程序的可读性和可维护性。此外,它还可以提高程序的性能,因为编译器可以对 final 变量进行优化。

需要注意的是,虽然 final 变量的值不能被修改,但是它所引用的对象的状态是可以被修改的。也就是说,如果一个 final 变量引用了一个可变对象,那么这个对象的状态是可以被修改的,只是变量本身不能再引用其他对象。例如:

final List<String> list = new ArrayList<>();
list.add("hello"); // 可以修改list所引用的ArrayList对象的状态
list = new ArrayList<>(); // 编译错误,不能将list引用另一个ArrayList对象

总的来说,使用 final 关键字可以使代码更加清晰、易读和可维护。在编写Java程序时,应该根据具体情况来考虑是否使用 final 关键字。

2. final,finally,finalize的区别

1. final

  • final 是一个关键字,可用于变量、方法和类。
  • 当应用于变量时,final 表示该变量的数值在初始化后不能被修改,即成为常量。
  • 当应用于方法时,final 表示该方法不能被子类重写。
  • 当应用于类时,final 表示该类不能被继承。

2. finally

  • finally 是与异常处理相关的关键字,在异常处理结构(try-catch-finally)中使用。
  • 无论是否发生异常,finally 中的代码块都会被执行,通常用于释放资源或执行清理操作。

3. finalize

  • finalize 是一个方法,属于 Java 中的 Object 类。
  • 在早期的 Java 版本中,程序员可以覆盖 finalize 方法来定义对象在被垃圾回收前的清理行为。
  • 从 Java 9 开始,finalize 方法已被标记为过时,不再建议使用,因为它的执行时机不确定且存在性能问题。

关于finalize更详细的介绍可以看这篇博文:java中object的常用方法

4. 总结

  • final 用于定义常量、禁止重写或继承,是一种修饰符。
  • finally 用于异常处理,确保代码块中的内容得到执行,无论是否有异常抛出。
  • finalize 是一个方法,用于对象在被垃圾回收前的清理,但不再推荐使用。

文章来源:https://blog.csdn.net/weixin_53066120/article/details/134803845
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。