Java异常处理实战:常见问题与解决方案
好的我们来全面解析 Java 中常见的Exception。内容包括出现场景、错误排查思路以及代码修正实战。一、Java 异常体系概述Java 异常分为两大类Error和Exception。Error通常表示严重问题如 JVM 崩溃而Exception是程序可处理的异常。Exception又分为检查型异常 (Checked Exception)编译时强制处理如IOException非检查型异常 (Unchecked Exception)运行时异常如NullPointerException二、常见异常解析与实战1.NullPointerException(空指针异常)场景调用null对象的成员方法/字段访问null数组的元素String str null; System.out.println(str.length()); // 触发 NullPointerException排查检查调用链中哪个对象为null使用调试工具如 IDEA 的 Evaluate Expression修正// 防御性检查 if (str ! null) { System.out.println(str.length()); } // 或使用 OptionalJava 8 Optional.ofNullable(str).ifPresent(s - System.out.println(s.length()));2.ArrayIndexOutOfBoundsException(数组越界)场景访问超出数组长度的索引int[] arr {1, 2, 3}; System.out.println(arr[3]); // 索引范围 [0,2]排查确认数组长度arr.length检查循环边界条件修正// 动态检查索引 int index 3; if (index 0 index arr.length) { System.out.println(arr[index]); }3.ClassCastException(类型转换异常)场景强制转换不兼容的类型Object obj Hello; Integer num (Integer) obj; // String 无法转为 Integer排查使用instanceof预先检查类型检查泛型擦除导致的类型信息丢失修正if (obj instanceof Integer) { Integer num (Integer) obj; }4.IOException(输入输出异常)场景文件读写时路径错误、权限不足网络连接中断try (FileReader fr new FileReader(invalid_path.txt)) { // 读取文件 } catch (IOException e) { // 捕获 FileNotFoundException子类 e.printStackTrace(); }排查检查文件路径是否存在确认读写权限修正Path path Paths.get(data.txt); if (Files.exists(path)) { try (BufferedReader reader Files.newBufferedReader(path)) { // 安全操作 } }5.NumberFormatException(数字格式异常)场景将非数字字符串转为数值类型int num Integer.parseInt(123abc); // 解析失败排查验证字符串是否为纯数字处理用户输入时的非法字符修正String input 123abc; try { int num Integer.parseInt(input); } catch (NumberFormatException e) { System.out.println(非法输入: input); }6.ConcurrentModificationException(并发修改异常)场景遍历集合时修改结构如ArrayListListString list new ArrayList(Arrays.asList(A, B)); for (String s : list) { if (B.equals(s)) { list.remove(s); // 触发异常 } }排查避免在迭代中直接修改集合使用迭代器的remove()方法修正IteratorString iterator list.iterator(); while (iterator.hasNext()) { String s iterator.next(); if (B.equals(s)) { iterator.remove(); // 安全删除 } }三、通用排查技巧阅读堆栈轨迹 (Stack Trace)定位异常抛出点和调用链Exception in thread main java.lang.NullPointerException at com.example.Test.main(Test.java:10) // 第10行代码日志分析使用Log4j或SLF4J记录详细上下文单元测试覆盖通过测试用例复现异常场景四、异常处理最佳实践精准捕获try { // 可能抛出多种异常的操作 } catch (FileNotFoundException e) { // 处理特定异常 } catch (IOException e) { // 更通用的处理 }资源自动关闭try (Socket socket new Socket(host, 8080)) { // 自动关闭资源实现 AutoCloseable }自定义异常public class BalanceException extends Exception { public BalanceException(String message) { super(message); } }总结掌握常见异常的场景与处理方法能显著提升代码健壮性。关键点理解异常类型体系检查型 vs 非检查型优先使用防御性编程善用日志和调试工具排查问题通过持续实践你将能快速定位并修复代码中的异常问题。