🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
- 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息
文章目录
- JavaSE核心知识点02面向对象编程02-08(异常处理)
- **一、异常处理的核心概念**
- **1. 什么是异常?**
- **2. Java异常分类**
- **二、异常处理的关键字**
- **1. try-catch-finally**
- **2. throws**
- **3. throw**
- **三、常见异常类型与处理**
- **1. 常见异常示例**
- **2. 处理多个异常**
- **四、自定义异常**
- **1. 创建自定义异常类**
- **2. 使用自定义异常**
- **五、最佳实践与常见陷阱**
- **1. 最佳实践**
- **2. 常见陷阱**
- **六、总结与练习**
- **1. 关键点总结**
- **2. 练习题目**
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
好的!作为Java新手,掌握异常处理是编写健壮程序的关键。以下是一份详细的Java异常处理指南,包含基础概念、使用方法和实际示例:
JavaSE核心知识点02面向对象编程02-08(异常处理)
一、异常处理的核心概念
1. 什么是异常?
- 异常(Exception):程序运行时发生的非正常情况,会中断正常的指令流。
- 异常处理的必要性:避免程序崩溃、提供友好错误提示、确保资源正确释放。
2. Java异常分类
Java异常体系以 Throwable
为根类,分为两类:
- Error:严重错误(如内存溢出
OutOfMemoryError
),程序无法处理。 - Exception:可处理的异常,分为两类:
- Checked Exception(检查型异常):编译时强制检查(如
IOException
)。 - Unchecked Exception(非检查型异常):运行时异常(如
NullPointerException
、ArithmeticException
)。
- Checked Exception(检查型异常):编译时强制检查(如
二、异常处理的关键字
1. try-catch-finally
try {// 可能抛出异常的代码int result = 10 / 0; // 抛出 ArithmeticException
} catch (ArithmeticException e) {// 捕获并处理异常System.out.println("除数不能为零!");
} finally {// 无论是否发生异常,都会执行的代码(常用于释放资源)System.out.println("执行finally块");
}
2. throws
声明方法可能抛出的异常,由调用者处理:
public void readFile() throws IOException {FileReader file = new FileReader("test.txt");// ...
}
3. throw
手动抛出异常对象:
if (age < 0) {throw new IllegalArgumentException("年龄不能为负数!");
}
三、常见异常类型与处理
1. 常见异常示例
异常类型 | 触发场景 | 处理建议 |
---|---|---|
NullPointerException | 调用 null 对象的方法或属性 | 检查对象是否为 null |
ArrayIndexOutOfBounds | 访问数组越界位置 | 检查数组索引范围 |
IOException | 文件读写失败(如文件不存在) | 使用 try-catch 或 throws |
NumberFormatException | 字符串转换为数字失败(如 "abc" ) | 校验输入是否为有效数字 |
2. 处理多个异常
try {FileInputStream fis = new FileInputStream("file.txt");int data = fis.read();
} catch (FileNotFoundException e) {System.out.println("文件未找到!");
} catch (IOException e) {System.out.println("读取文件失败!");
} catch (Exception e) {// 兜底处理(不建议滥用)System.out.println("未知错误!");
}
四、自定义异常
1. 创建自定义异常类
public class InsufficientBalanceException extends Exception {public InsufficientBalanceException(String message) {super(message);}
}
2. 使用自定义异常
public void withdraw(double amount) throws InsufficientBalanceException {if (amount > balance) {throw new InsufficientBalanceException("余额不足!");}balance -= amount;
}
五、最佳实践与常见陷阱
1. 最佳实践
- 精准捕获:避免捕获过于宽泛的异常(如直接
catch (Exception e)
)。 - 资源释放:使用
try-with-resources
(Java 7+)自动关闭资源:try (FileInputStream fis = new FileInputStream("file.txt")) {// 使用资源 } catch (IOException e) {e.printStackTrace(); }
- 记录异常:使用日志工具(如
log4j
)记录异常堆栈:catch (SQLException e) {logger.error("数据库操作失败", e); }
2. 常见陷阱
- 忽略异常:空
catch
块会隐藏问题。// 错误示例! try {// 可能出错的代码 } catch (Exception e) {// 空处理 }
- 在finally中return:可能导致异常被覆盖。
try {// ... } finally {return; // 不推荐! }
六、总结与练习
1. 关键点总结
- 分类:理解Checked vs Unchecked异常的区别。
- 处理方式:
try-catch
、throws
、throw
的适用场景。 - 资源管理:优先使用
try-with-resources
替代手动关闭。
2. 练习题目
- 编写代码读取文件内容,处理可能的
FileNotFoundException
。 - 实现一个除法方法,当除数为零时抛出
ArithmeticException
。 - 自定义一个
InvalidEmailException
,并在用户输入无效邮箱时抛出。
通过实际编码练习,逐步掌握异常处理的核心技巧!遇到问题时,可查阅 Java官方文档 或调试工具(如IDE的断点功能)。
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇