Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

  • Spring 生态类

  • 缓存问题类

  • 多线程类

  • JVM 类

  • MySQL 类

  • Java 8 + 特性类

    • 使用 Java 8 的优点是什么?
    • 集合与流有何不同?
    • 什么是 Lambda 表达式?
    • 解释 Predicate 和 Consumer 函数式接口
    • peek () 方法在 Java 8 中的作用?
    • 什么是函数式接口?
    • 接口中的静态方法有什么作用?
    • skip (long) 和 limit (long) 的区别?
    • 抽象类和接口的异同?
    • overload 与 override 的区别?
    • HashMap 在 Java 8 中的变化?
    • HashMap、LinkedHashMap、Hashtable、ConcurrentHashMap 的区别?
    • Lambda 参数列表与箭头运算符的作用?
    • sleep () 和 wait () 的区别?
    • throw 与 throws 的区别?
    • final、finally、finalize 的区别?
      • Collection 与 Collections 的区别
      • ArrayList、LinkedList、Vector 的区别?
    • 其他技术类

    • 常见面试题
    • Java 8 + 特性类
    刘博
    2025-12-29
    目录

    final、finally、finalize 的区别?

    final、finally、finalize是 Java 中三个形似但功能完全不同的关键字 / 方法,核心区别如下:

    # 1. final(关键字)

    • 核心作用:用于修饰类、方法、变量,限制其可变性;

    • 具体用法:

      • 修饰类:类不能被继承(如final class String);
      • 修饰方法:方法不能被重写(子类无法修改该方法);
      • 修饰变量:变量不能被重新赋值(基本类型:值不变;引用类型:引用地址不变,对象内容可修改);
    • 示例:

      final int num = 10;
      // num = 20; // 编译报错(变量不能重写赋值)
      
      final class FinalClass {}
      // class SubClass extends FinalClass {} // 编译报错(类不能被继承)
      
      1
      2
      3
      4
      5

    # 2. finally(关键字)

    • 核心作用:用于try-catch-finally异常处理结构,无论try块是否抛出异常、catch块是否执行,finally块都会执行;

    • 常用场景:释放资源(如关闭文件流、数据库连接),确保资源不泄露;

    • 注意事项:finally块中若有return,会覆盖try/catch块的return值;

    • 示例:

      public static int testFinally() {
          try {
              return 1;
          } catch (Exception e) {
              return 2;
          } finally {
              System.out.println("finally执行"); // 必然执行
              // return 3; // 若添加,会覆盖try的return 1,返回3
          }
      }
      // 调用后输出:finally执行,返回1
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

    # 3. finalize(方法)

    • 核心作用:Object类的 protected 方法,用于对象被 GC 回收前的资源释放(如释放本地内存、关闭资源);

    • 执行机制:对象被 GC 标记为可回收后,GC 会调用该方法,之后才真正回收对象;

    • 缺点:

      • 执行时间不确定(无法保证何时被 GC 调用);
      • 效率低(可能导致对象延迟回收);
      • 已被 Java 9 标记为 deprecated(过时),推荐用try-with-resources或AutoCloseable替代;
    • 示例:

      class Resource {
          @Override
          protected void finalize() throws Throwable {
              System.out.println("对象被回收前执行finalize");
              // 释放资源(如关闭连接)
              super.finalize();
          }
      }
      
      1
      2
      3
      4
      5
      6
      7
      8

    # 核心区别总结

    • final:限制可变性(类、方法、变量);
    • finally:异常处理中确保代码执行(释放资源);
    • finalize:对象回收前的资源释放(已过时)。

    #


    上次更新: 12/30/2025
    throw 与 throws 的区别?
    Collection 与 Collections 的区别

    ← throw 与 throws 的区别? Collection 与 Collections 的区别→

    最近更新
    01
    CPU 使用率较高排查和解决
    12-29
    02
    JVM OOM 问题如何排查和解决
    12-29
    03
    接口防刷怎么实现?
    12-29
    更多文章>
    Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式