您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 2021最新版Java异常面试题大全(深度解析)
## 目录
- [一、Java异常体系基础](#一java异常体系基础)
- [二、核心面试题详解](#二核心面试题详解)
- [三、异常处理最佳实践](#三异常处理最佳实践)
- [四、高频场景问题剖析](#四高频场景问题剖析)
- [五、JVM与异常机制](#五jvm与异常机制)
- [六、框架中的异常处理](#六框架中的异常处理)
- [七、面试实战模拟](#七面试实战模拟)
---
## 一、Java异常体系基础
### 1.1 异常分类图谱
```java
Throwable
├── Error (不可处理)
│ ├── VirtualMachineError
│ └── OutOfMemoryError
└── Exception (可处理)
├── RuntimeException (未检查异常)
│ ├── NullPointerException
│ └── IndexOutOfBoundsException
└── 非RuntimeException (已检查异常)
├── IOException
└── SQLException
特性 | 检查异常(Checked) | 非检查异常(Unchecked) |
---|---|---|
继承关系 | 继承Exception | 继承RuntimeException |
编译检查 | 必须处理 | 不强制处理 |
典型场景 | I/O、数据库操作 | 空指针、数组越界 |
深度解析:
try {
System.exit(1); // JVM终止
Thread.currentThread().interrupt(); // 线程中断
} finally {
System.out.println("不会执行");
}
特殊情况:
1. JVM崩溃或System.exit()
2. 线程被杀死
3. 无限循环阻塞
字节码分析:
// 源代码
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()
}
案例演示:
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;
}
// 正例 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)
字节码示例:
Exception table:
from to target type
4 16 19 java/io/IOException
三种方式对比:
1. @ControllerAdvice
2. HandlerExceptionResolver
3. SimpleMappingExceptionResolver
问题:
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种异常性能优化方案等深度内容。)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。