当前位置: 首页 > news >正文

异常谋杀案--Java异常处理篇

🚨 一、异常初探:程序世界的“小感冒” 😷


💡 异常是什么?
在Java世界里,**异常(Exception)**就像是程序运行时的小感冒🤧,虽然不至于让它“挂掉”,但会让你的程序变得不舒服。

Throwable(可抛出)
├── Error(错误)❌ 系统级问题,程序无法处理
└── Exception(异常)⚠️ 程序可以捕获并处理├── RuntimeException(运行时异常)🚨 不强制处理└── 非RuntimeException(受检异常)🔍 必须try-catch或throws声明


🧪 二、异常家族成员介绍 👪


1. Error 错误家族 ❌
StackOverflowError:递归太深,栈溢出了😵‍💫
OutOfMemoryError:内存不够用了😭
特点:程序无力回天,只能认命💀
2. Exception 异常家族 ⚠️
✅ 受检异常(Checked Exceptions):
IOException:文件读写失败📁💔
SQLException:数据库连接不上🔌🚫
特点:编译器强迫你必须处理!
🚨 非受检异常(Unchecked Exceptions):
NullPointerException:对象没初始化就调用方法💥
ArrayIndexOutOfBoundsException:数组越界了😱
ArithmeticException:除以0啦⛔
特点:编译器不管你,全靠自觉!


🛡️ 三、异常处理四大法宝 🔱


1. try-catch:救火队员 🚒

try {int result = 10 / 0;  // 危险操作💣
} catch (ArithmeticException e) {System.out.println("哎呀,除以0啦!别慌,我来救场!🚒");
}


2. finally:善后大师 🧹
无论有没有异常,都会执行,适合用来关闭资源🔒。

FileReader reader = null;
try {reader = new FileReader("file.txt");  // 打开文件📖// 读取内容...
} catch (IOException e) {System.out.println("读取失败!😢");
} finally {if (reader != null) {reader.close();  // 一定要关上文件🚪}
}


3. throws:甩锅高手 🙅‍♂️
不自己处理,把异常扔给调用者处理。

public void readFile() throws IOException {FileReader reader = new FileReader("file.txt");  // 可能会出错
}


4. throw:主动制造异常 🧨


当你发现不对劲,就可以主动抛出一个异常!

if (age < 0) {throw new IllegalArgumentException("年龄不能为负数!😡");
}

🤖 四、自定义异常:打造属于你的专属错误类型 🎨
有时候系统自带的异常不够用怎么办?那就自己造一个吧!🧱

示例代码:

public class InvalidAgeException extends Exception {public InvalidAgeException(String message) {super(message);}
}// 使用示例
public void checkAge(int age) throws InvalidAgeException {if (age < 0) {throw new InvalidAgeException("年龄不能小于0!");}System.out.println("年龄合法:" + age);
}


🧠 五、异常处理最佳实践 🦸‍♂️


✅ 好习惯养成指南:

建议说明
不要生吞异常捕获了异常却什么都不做,比不捕获还可怕❗
明确捕获具体异常不要catch(Exception e),要精确到具体类型🎯
记录日志e.printStackTrace() 太low了,要用日志框架记录📝
使用try-with-resources(JDK7+)自动关闭资源,告别finally里的垃圾代码🗑️
避免在finally中抛异常否则可能掩盖try中的异常😱

示例:优雅的try-with-resources写法 ✨

try (FileInputStream fis = new FileInputStream("data.txt")) {int data = fis.read();System.out.println("读取的数据:" + data);
} catch (IOException e) {System.err.println("读取失败!错误信息:" + e.getMessage());
}

🧪 六、常见异常案例分析 📚

异常类型场景如何避免
NullPointerException对象未初始化就调用方法加空判断或使用Optional类📦
ArrayIndexOutOfBoundsException数组访问越界循环前检查索引范围🔍
ClassCastException类型转换错误使用instanceof判断后再转型🔄
NumberFormatException字符串转数字失败使用正则校验或try-catch包裹🔢
FileNotFoundException文件不存在提前检查文件是否存在📂

 

🎁 七、趣味总结一句话 🧾


异常就像生活中的小意外🌧️,我们可以选择崩溃崩溃再崩溃,也可以优雅地应对它,并继续前行🌈。

掌握好异常处理,让你的程序不再轻易“崩溃”,而是优雅地“报错”和“恢复”💪✨

 

http://www.xdnf.cn/news/990199.html

相关文章:

  • 工程论文: TORL: Scaling Tool-Integrated RL
  • StackOverflowError
  • (javaSE)继承和多态:成员变量,super,子类构造方法,super和this,初始化, protected 继承方式 final关键字 继承与组合
  • Dify-7: RAG 知识系统
  • 什么是项目进度管理?项目进度管理有哪些核心功能?
  • LLM 系列(二) :基础概念篇
  • 力扣-347.前K个高频元素
  • 控制器轨迹生成
  • 编程项目学习,怎么快速掌握
  • 菜鸟带新鸟--EPlan2022创建自己的标识字母
  • 创建和运行线程
  • *res = append(*res, temp) 为什么要使用 temp 作为临时存储值
  • Hydra 工具小白入门教程指导篇
  • 18.进程间通信(四)
  • Python_day51
  • Future与CompletableFuture:异步编程对比
  • v4l2_subdev 与 /dev/videoX 的关联
  • Git不能更新以及提交代码,提示链接超时,本地凭证无问题
  • 6.11 MySQL面试题 日志 性能 架构
  • 深入理解TCP以及三次握手与四次挥手
  • 面对多个项目并行,协作机制如何建立?
  • Java 8 Stream 流详细教程 - 全面指南
  • 重塑未来的力量:人工智能的技术演进与产业变革
  • git的5种分支分别是干嘛的,git常用指令
  • git的常用方法
  • 交换机上抓包
  • 大模型与人工智能
  • 了解shell中的Fork炸弹
  • Java并发编程实战 Day 17:CompletableFuture高级应用
  • 种子音乐携手RBW 精心打造Solar颂乐首支中文单曲《Floating Free》