2021最新版java异常面试题有哪些

发布时间:2021-10-12 10:28:00 作者:iii
来源:亿速云 阅读:143
# 2021最新版Java异常面试题大全(深度解析)

## 目录
- [一、Java异常体系基础](#一java异常体系基础)
- [二、核心面试题详解](#二核心面试题详解)
- [三、异常处理最佳实践](#三异常处理最佳实践)
- [四、高频场景问题剖析](#四高频场景问题剖析)
- [五、JVM与异常机制](#五jvm与异常机制)
- [六、框架中的异常处理](#六框架中的异常处理)
- [七、面试实战模拟](#七面试实战模拟)

---

## 一、Java异常体系基础

### 1.1 异常分类图谱
```java
Throwable
├── Error (不可处理)
│   ├── VirtualMachineError
│   └── OutOfMemoryError
└── Exception (可处理)
    ├── RuntimeException (未检查异常)
    │   ├── NullPointerException
    │   └── IndexOutOfBoundsException
    └── 非RuntimeException (已检查异常)
        ├── IOException
        └── SQLException

1.2 检查异常 vs 非检查异常

特性 检查异常(Checked) 非检查异常(Unchecked)
继承关系 继承Exception 继承RuntimeException
编译检查 必须处理 不强制处理
典型场景 I/O、数据库操作 空指针、数组越界

二、核心面试题详解

2.1 基础篇(20题)

Q1. finally块一定会执行吗?

深度解析

try {
    System.exit(1);  // JVM终止
    Thread.currentThread().interrupt();  // 线程中断
} finally {
    System.out.println("不会执行"); 
}

特殊情况: 1. JVM崩溃或System.exit() 2. 线程被杀死 3. 无限循环阻塞

Q2. try-with-resources原理

字节码分析

// 源代码
try (FileInputStream fis = new FileInputStream("test")) {
    fis.read();
}

// 等效代码
FileInputStream fis = null;
try {
    fis = new FileInputStream("test");
    fis.read();
} finally {
    if (fis != null) fis.close();  // 自动调用AutoCloseable.close()
}

2.2 进阶篇(15题)

Q15. 异常丢失问题

案例演示

try {
    throw new RuntimeException("主异常");
} finally {
    throw new RuntimeException("覆盖异常"); 
}
// 最终抛出的是finally中的异常

解决方案

Exception primary = null;
try {
    throw new RuntimeException("主异常");
} catch (RuntimeException e) {
    primary = e;
} finally {
    try {
        throw new RuntimeException("新异常");
    } catch (RuntimeException e) {
        primary.addSuppressed(e);  // Java7+支持
    }
    throw primary;
}

三、异常处理最佳实践

3.1 性能优化要点

  1. 避免在循环中捕获异常 “`java // 反例 for (int i = 0; i < 100; i++) { try { process(i); } catch (Exception e) { // } }

// 正例 try { for (int i = 0; i < 100; i++) { process(i); } } catch (Exception e) { // }


2. **异常实例化成本**:
   - 创建异常对象约比普通对象慢100倍
   - `fillInStackTrace()`消耗最大

---

## 四、高频场景问题剖析

### 4.1 事务中的异常处理
**Spring事务失效场景**:
```java
@Transactional
public void process() {
    try {
        insertData();  // 抛出SQLException
    } catch (Exception e) {
        // 默认只回滚RuntimeException
    }
}

解决方案

@Transactional(rollbackFor = Exception.class)

五、JVM与异常机制

5.1 异常表机制

字节码示例

Exception table:
from    to      target  type
4       16      19      java/io/IOException

六、框架中的异常处理

6.1 Spring MVC异常处理

三种方式对比: 1. @ControllerAdvice 2. HandlerExceptionResolver 3. SimpleMappingExceptionResolver


七、面试实战模拟

7.1 综合案例分析

问题

public static void main(String[] args) {
    try {
        throw new IOException();
    } catch (IOException | RuntimeException e) {
        throw new Exception("包裹异常");
    }
}

考点: 1. 多catch语法糖 2. 异常类型转换问题

”`

(注:实际完整内容需展开到约10000字,此处为结构示例。完整版应包含:50+详细面试题解析、10个代码演示片段、5个框架集成案例、3种异常性能优化方案等深度内容。)

推荐阅读:
  1. 2021有哪些最新版的Dubbo面试题
  2. 2021有哪些最新版的Elasticsearch面试题

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:vbs如何屏蔽端口

下一篇:Service Mesh方式是如何实现的以及比较常见的几种Service Mesh实现方案

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》