Java异常处理机制详解 | 类层次、捕获处理、自定义异常与实战案例
简介全面讲解Java异常体系结构、异常处理语法、文件求最大值实战、自定义异常开发附带完整实训代码零基础也能看懂掌握。目录前言什么是Java异常处理机制异常类整体层次结构Java常见异常处理方式实战案例读取数据文件查找最大值自定义异常类开发与使用异常处理综合实训任务总结1. 前言什么是Java异常处理机制程序编写完成语法无误不代表运行不会出错。在实际运行中会出现数组下标越界、空对象调用、除数为0、文件读取失败、网络断开、非法数据录入等意外情况这类非正常运行状况就是异常。Java提供一套成熟完整的异常处理机制专门用来管理程序运行错误。传统写法遇到错误会直接闪退崩溃异常机制可以主动捕获错误、给出提示信息、补救业务逻辑、释放占用资源避免程序整体终止运行大幅提升软件健壮性、容错性与稳定性。异常机制核心作用分离正常业务代码与错误处理代码规范错误抛出、传递、捕获流程方便开发调试与后期维护。2. 异常类整体层次结构Java中所有异常、错误都继承自Throwable顶级父类整体分为两大分支Error和Exception。2.1 Error 系统级错误属于虚拟机底层严重错误程序无法捕获、无法手动处理出现后程序基本无法恢复运行。常见场景内存溢出、虚拟机崩溃、栈溢出等。2.2 Exception 程序级异常日常开发中重点处理的异常代码可以捕获并修复分为两大类运行时异常 RuntimeException编译不报错运行期间才触发编译器不强制处理。常见空指针异常、数组越界、类型强转异常、算术除零异常。编译时受检异常编译阶段强制校验必须处理否则无法运行。常见文件IO异常、网络异常、类不存在异常。层级结构图Throwable├─ Error 系统严重错误不可处理└─ Exception 可处理程序异常├─ RuntimeException 运行时异常└─ 编译时受检异常3. Java常见异常处理方式Java依靠关键字实现异常管控四种常用处理方式。3.1 try-catch-finally 捕获异常将容易报错的代码放入try块出现异常自动匹配对应catch执行处理逻辑finally块无论是否发生异常必定执行多用于关闭文件流、数据库连接、释放资源。基础语法try {// 可能产生异常的代码} catch (异常类型 e) {// 异常处理逻辑} finally {// 资源释放代码}3.2 throws 抛出异常定义方法时声明可能出现的异常将异常向上抛给调用者处理当前方法不捕获。3.3 throw 手动抛出异常代码中主动创建异常对象并抛出用于主动判定非法数据触发异常提醒。3.4 try-with-resources 自动释放资源简化IO流、连接资源关闭代码执行完毕自动释放资源无需手动写finally关闭。4. 实战案例读取数据文件查找最大值需求读取本地txt文件中的数字数据遍历找出最大值加入异常处理防止文件不存在、数据格式错误等问题。完整代码import java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;public class FindMaxNum {public static void main(String[] args) {File file new File(data.txt);Scanner sc null;int max Integer.MIN_VALUE;try {sc new Scanner(file);while (sc.hasNextInt()) {int num sc.nextInt();if (num max) {max num;}}System.out.println(文件中数据最大值为 max);} catch (FileNotFoundException e) {System.out.println(异常数据文件不存在请检查文件路径);} finally {if (sc ! null) {sc.close();}}}}案例说明捕获文件不存在异常避免程序崩溃循环读取文件内整数对比求取最大值finally中关闭扫描流避免资源泄露5. 自定义异常类开发与使用Java内置异常无法满足业务特殊判定场景可继承Exception或RuntimeException创建自定义异常用于业务规则校验报错。5.1 自定义异常类// 自定义数值非法异常public class NumIllegalException extends Exception{public NumIllegalException(){super();}public NumIllegalException(String msg){super(msg);}}5.2 测试调用自定义异常public class CustomExceptionTest {public static void checkNum(int num) throws NumIllegalException{if(num 0){throw new NumIllegalException(数值不能为负数不符合业务规则);}System.out.println(数值校验通过num);}public static void main(String[] args) {try {checkNum(-5);} catch (NumIllegalException e) {e.printStackTrace();}}}使用场景会员等级、分数判定、金额校验、账号权限等专属业务报错都可以使用自定义异常。6. 异常处理综合实训任务实训要求自定义成绩异常类分数超出0~100范围抛出异常编写方法接收学生成绩合法正常输出非法抛出自定义异常使用try-catch捕获异常输出错误提示完善异常处理结构保证程序稳定运行实训完整代码// 自定义成绩异常class ScoreException extends Exception{public ScoreException(String message){super(message);}}public class ScoreTrain {// 成绩校验方法public static void judgeScore(int score) throws ScoreException{if(score 0 || score 100){throw new ScoreException(成绩非法分数必须在0-100之间);}System.out.println(成绩录入成功当前分数score);}public static void main(String[] args) {int stuScore 120;try {judgeScore(stuScore);} catch (ScoreException e) {System.out.println(录入失败e.getMessage());}}}7. 总结异常是程序运行时非正常错误异常机制用于容错防护防止程序闪退崩溃。所有异常根源为Throwable分为Error系统错误与Exception可处理异常包含运行时异常和编译异常。常用处理方式try-catch捕获、throws抛异常、throw手动抛异常、自动资源释放。文件读取求最大值属于IO异常典型实战日常开发高频使用。内置异常无法满足业务时可继承异常类创建自定义异常实现个性化规则报错。合理使用异常处理能极大提升代码健壮性、可读性与后期维护效率。