Java异常体系:核心结构、异常分类、关键字用法

Java异常体系:核心结构、异常分类、关键字用法
目录一、Java异常体系核心结构面试必背1.1 Error 严重错误1.2 Exception 可处理异常1.2.1 受检异常Checked Exception1.2.2 非受检异常Unchecked Exception二、五大异常核心关键字详解2.1 try2.2 catch2.3 finally2.4 throw2.5 throws三、全套代码实战演示3.1 try-catch-finally 完整结构3.2 throw throws 联合实战3.3 Error 系统级错误演示无法捕获四、企业级异常最佳实践面试加分项4.1 禁止直接捕获 Throwable4.2 禁止空 catch 块4.3 优先使用 try-with-resources 自动释放资源五、面试极简背诵总结六、文末小结在 Java 开发与面试中异常体系是基础必考点也是保障程序健壮性的核心机制。程序运行时出现的报错、崩溃、IO中断、参数非法等问题全部依托 Java 异常体系进行统一捕获、处理、恢复。很多开发者只会简单使用 try-catch却分不清 Error 和 Exception、受检异常与运行时异常的本质区别日常代码经常出现空捕获、捕获Throwable、资源未释放等不规范写法。本文基于标准面试答案完整拆解 Java 异常顶层结构、异常分类、五大异常关键字执行逻辑搭配全套实战代码与企业级最佳实践一次性彻底吃透 Java 异常体系。一、Java异常体系核心结构面试必背Java 所有异常、错误的顶层父类为 Throwable其下分为两大分支Error系统级错误与Exception可处理异常。1.1 Error 严重错误属于 JVM 层级的严重系统错误程序无法手动捕获和恢复属于不可逆崩溃。常见场景内存溢出、栈溢出、虚拟机异常。典型错误OutOfMemoryError内存溢出、StackOverflowError栈溢出1.2 Exception 可处理异常是程序代码层面的异常开发者可以通过代码捕获、处理、兜底保证程序不崩溃。分为两大类1.2.1 受检异常Checked Exception编译期异常编译阶段强制要求处理try-catch 捕获 or throws 抛出否则编译不通过。常见IOException、SQLException、ClassNotFoundException1.2.2 非受检异常Unchecked Exception运行时异常全部继承自RuntimeException编译不校验运行时才会报错无需强制捕获。常见NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException二、五大异常核心关键字详解Java 异常处理全套关键字try、catch、finally、throw、throws2.1 try用于包裹可能出现异常的风险代码一旦代码出现异常立刻终止当前执行进入 catch 捕获逻辑。2.2 catch用于捕获 try 中抛出的指定类型异常支持多 catch 分层捕获必须先子类异常、后父类异常。2.3 finally资源最终释放块无论是否出现异常、是否 returnfinally 代码一定会执行。专门用于关闭 IO 流、数据库连接、Socket 等资源。2.4 throw方法内部使用手动主动抛出具体异常对象中断当前业务逻辑。2.5 throws写在方法签名后声明该方法存在异常风险告知调用方处理异常本身不抛出异常。三、全套代码实战演示3.1 try-catch-finally 完整结构public class ExceptionDemo { public static void main(String[] args) { try { // 风险代码可能出现除零异常 int result 1 / 0; } catch (ArithmeticException e) { // 精准捕获运算异常 System.out.println(捕获运算异常 e.getMessage()); } finally { // 必定执行资源释放 System.out.println(finally 资源释放完成); } } }3.2 throw throws 联合实战public class ThrowThrowsDemo { // throws声明方法可能存在异常 public static void checkAge(int age) throws Exception { if (age 0) { // throw手动抛出异常对象 throw new Exception(年龄不能为负数); } System.out.println(年龄合法); } public static void main(String[] args) { try { checkAge(-10); } catch (Exception e) { System.out.println(业务异常 e.getMessage()); } } }3.3 Error 系统级错误演示无法捕获public class StackErrorDemo { // 递归死循环必然栈溢出 StackOverflowError public static void recursion() { recursion(); } public static void main(String[] args) { try { recursion(); } catch (Exception e) { // 无法捕获 Error 级错误 System.out.println(捕获异常); } } }结论Error 不属于 Exception无法被 Exception 捕获属于 JVM 致命错误。四、企业级异常最佳实践面试加分项4.1 禁止直接捕获 ThrowableThrowable 包含 ErrorError 是系统致命错误无法处理捕获无意义且掩盖真实问题。4.2 禁止空 catch 块空捕获会吞掉异常线上报错无日志、无堆栈无法排查问题是严重不规范写法。4.3 优先使用 try-with-resources 自动释放资源JDK7 新特性实现 AutoCloseable 接口的资源IO流、连接可自动关闭无需手动写 finally。import java.io.FileReader; public class TryResourceDemo { public static void main(String[] args) { // 自动关闭流资源无需finally try (FileReader reader new FileReader(test.txt)) { System.out.println(读取文件); } catch (Exception e) { e.printStackTrace(); } } }五、面试极简背诵总结1. 顶层结构Throwable 分为 Error系统致命错误不捕获、Exception代码可处理异常。2. 异常分类受检异常编译强制处理运行时异常无需强制捕获多为代码逻辑问题。3. 关键字区别try-catch-finally 处理异常流程throws 声明异常throw 抛出异常。4. 最佳实践不捕获Throwable、不做空catch、优先使用try-with-resources、精准捕获异常。六、文末小结Java 异常体系是程序容错、高可用的核心保障。区分 Error 与 Exception、分清受检与运行时异常、规范使用五大关键字是每一位 Java 开发者的必备基础。规范的异常处理不仅能解决面试考题更能极大提升项目健壮性避免线上程序崩溃、资源泄露、异常吞灭等高危 Bug。