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 的区别?

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

1. final

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

  • 用途:

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

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

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

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

2. finally

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

  • 用途:

    • 通常与 try 和 catch 一起使用,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

相关推荐
vx-程序开发14 分钟前
【计算机毕设】51300童装超市管理系统的设计与实现
java·vue.js·spring boot·源码·课程设计·毕设·大作业
青柠之夏cc35 分钟前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
ym hyd 11142 分钟前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
risc1234561 小时前
什么是码点?
java
OKkankan1 小时前
Python 高阶语法(一):高阶函数、闭包、lambda 与 functools——从底层真正理解装饰器
开发语言·python
ShineWinsu1 小时前
对于Redis:事务的解析
数据库·redis·mysql·缓存·面试·事务·acid
geovindu1 小时前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
福大大架构师每日一题1 小时前
Rust 1.99.0发布:C 可变参数、裸函数、Cargo 配置、Rustdoc 性能与大量兼容性调整全解析
c语言·开发语言·rust
JavaPub-rodert1 小时前
公共 Docker 镜像源总失效?用 Harbor Proxy Cache 自建 Docker Hub 镜像缓存
java·缓存·docker
智鸟科技GemeOpen开发者智能设备1 小时前
平安校园 AI 智能实时告警系统 智鸟科技·GemeOpen + 谷华科技·融合创新方案白皮书
java·开发语言·python·物联网·智能家居