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

相关推荐
贫民窟的勇敢爷们4 小时前
SpringBoot整合AOP切面编程实战,实现日志统一记录+接口权限校验
java·spring boot·spring
jerryinwuhan4 小时前
基于各城市站点流量的复合功能比较
开发语言·php
Mahir085 小时前
Redis 与 MySQL 数据同步:一致性保证的完整解决方案
数据库·redis·mysql·缓存·面试·数据一致性
AC赳赳老秦5 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
迈巴赫车主5 小时前
Java基础:list、set、map一遍过
java·开发语言
灵犀学长6 小时前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
南 阳6 小时前
Python从入门到精通day66
开发语言·python
刀法如飞7 小时前
Go 字符串查找的 20 种实现方式,用不同思路解决问题
算法·面试·程序员
好家伙VCC7 小时前
【无标题】
java
十八旬7 小时前
快速安装ClaudeCode完整指南
开发语言·windows·python·claude