Java高频面试之SE-09

hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶

final关键字有什么作用?

在 Java 中,final 关键字有多个用途,它可以用于类、方法和变量。根据使用的上下文,final 的含义和作用略有不同。以下是 final 关键字的不同用途及其作用:

1. 用于变量

  • 最终变量(Final Variables)

    • 如果一个变量被声明为 final,则该变量只能被赋值一次。一旦赋值后,不能再改变其值。
    java 复制代码
    final int x = 10;
    // x = 20; // 编译错误,不能修改最终变量
  • 引用类型

    • 对于引用类型的 final 变量,虽然变量本身不能再指向另一个对象,但可以修改对象的内部状态(即对象的属性)。
    java 复制代码
    final List<String> list = new ArrayList<>();
    list.add("Hello"); // 允许,修改对象的状态
    // list = new ArrayList<>(); // 编译错误,不能重新赋值

2. 用于方法

  • 最终方法(Final Methods)

    • 如果一个方法被声明为 final,则该方法不能被子类重写。这可以防止修改父类的方法实现,确保方法逻辑的稳定性。
    java 复制代码
    class Parent {
        final void show() {
            System.out.println("Final method in Parent class.");
        }
    }
    
    class Child extends Parent {
        // void show() { // 编译错误,无法重写父类的 final 方法
        //     System.out.println("Trying to override.");
        // }
    }

3. 用于类

  • 最终类(Final Classes)

    • 如果一个类被声明为 final,则该类不能被继承。换句话说,无法创建该类的子类。这通常用于设计不希望被修改的类,比如 String 类。
    java 复制代码
    final class FinalClass {
        // 类的内部实现
    }
    
    // class ExtendedClass extends FinalClass { // 编译错误,FinalClass 不能被继承
    // }

4. 用于提高性能

  • 使用 final 声明变量、方法或类时,编译器和 JVM 可以进行某些优化,因为它们知道该实体不会改变或被重写,从而可能提高性能。

5. 保持不可变性

  • 标记变量为 final 是确保数据不可变的一种机制,特别是在多线程编程中,可以防止对共享数据的意外修改。

总的来说

final 关键字在 Java 中用于限制变量、方法和类的行为。它可以帮助提高代码的可维护性、安全性和性能。理解 final 的用途能够帮助本牛马baby编写更健壮和可预测的代码。

final、finally、finalize 的区别?

finalfinallyfinalize 是 Java 中的三个不同关键字或方法,它们在功能和用途上有显著的区别:

1. final

  • 定义final 是一个关键字,用于声明一个变量、方法或类为最终的,意味着它不能被修改或重写。

  • 用途

    • 最终变量 :声明的变量只能赋值一次。

      java 复制代码
      final int x = 10;
    • 最终方法 :声明的方法不能被子类重写。

      java 复制代码
      final void myMethod() { /* ... */ }
    • 最终类 :声明的类不能被继承。

      java 复制代码
      final class MyClass { /* ... */ }

2. finally

  • 定义finally 是一个关键字,用于异常处理,它用于定义一个代码块,该代码块无论是否发生异常都将被执行。

  • 用途

    • 通常与 trycatch 一起使用,finally 块用于执行关闭资源或清理工作等必要操作。

      java 复制代码
      try {
          // 可能抛出异常的代码
      } catch (Exception e) {
          // 处理异常
      } finally {
          // 无论是否发生异常,都会执行的代码
      }

3. finalize

  • 定义finalize 是一个方法,属于 Object 类,可能会在垃圾回收前被调用。

  • 用途

    • finalize() 方法由垃圾回收器在对象被回收之前调用,以允许对象进行清理操作(如释放资源)。
    • 由于 finalize() 的使用具有不确定性,现在推荐使用 try-with-resources 或其他资源管理方式,而不是依赖于 finalize()
    java 复制代码
    protected void finalize() throws Throwable {
        try {
            // 清理资源的代码
        } finally {
            super.finalize(); // 保证父类的 finalize 也被调用
        }
    }

总的来说

  • final:用于声明不允许修改或继承的变量、方法或类。
  • finally:用于异常处理相关代码块,确保特定代码会执行。
  • finalize:是一个方法在对象即将被垃圾回收时调用,用于清理资源,但其使用不再推荐。

面试官:直接调用System.gc()会立即执行GC吗?

答:不会

IDEA ji huo
https://pan.quark.cn/s/4216736c0427
🎬大全
https://kdocs.cn/l/cqhxNU9I2lLD
12306回家科技
https://pan.quark.cn/s/45f6bf9be1b3

相关推荐
Karen198几秒前
汉服文化管理系统|Java|SSM|VUE| 前后端分离
java·数据库·mysql·毕业设计·课程设计
树不懒16 分钟前
【js引擎】quickjs 中的两个 proto
开发语言·javascript·原型模式
明天不吃。21 分钟前
【JMM】Java 内存模型
java·开发语言
成为大佬先秃头24 分钟前
Springboot整合Shiro使用yml文件管理Urls
java·spring boot·后端·shiro
鹿屿二向箔25 分钟前
基于Spring Boot的紧急物资管理系统
java·spring boot·后端
Jackson@ML32 分钟前
2025最新版Python 3.13.1安装使用指南
开发语言·python
ByteBlossom66633 分钟前
Elixir语言的学习路线
开发语言·后端·golang
代码驿站52034 分钟前
R语言的计算机基础
开发语言·后端·golang
山山而川粤40 分钟前
共享充电宝系统|Java|SSM|VUE| 前后端分离
java·开发语言·后端·学习·mysql
Biomamba生信基地41 分钟前
R语言基础| 中级绘图
开发语言·r语言