在 Java 中,throws 只是声明“这个方法可能抛出什么异常”,它本身不会“抛出”异常,真正的异常是在方法内部用 throw new XXXException() 产生的。调试的关键,是定位异常从哪抛出、为什么抛出、调用链是怎样的。
下面按实用思路给你一套调试方法。
// throws:声明可能抛出的异常(给调用者看)
public void read() throws IOException {
// throw:真正抛出异常
throw new IOException("文件不存在");
}
✅ 调试重点永远是 throw 的地方
当异常未被捕获,JVM 会打印:
Exception in thread "main" java.io.IOException: 文件不存在
at com.demo.Test.read(Test.java:10)
at com.demo.Main.main(Main.java:5)
✅ 直接点 IDE 里的 Test.java:10
throw new XXXException() 处Run → View Breakpoints+Java Exception BreakpointsIOException)✅ 一旦发生异常,立刻停在那一行
public void read() throws IOException {
System.out.println("准备读取文件");
throw new IOException("文件不存在");
}
或:
e.printStackTrace(); // 不推荐生产,但调试很好用
public void call() throws Exception {
read(); // 这里可能抛
}
调试方式:
call() 里打断点Step Into 进入 read()❌ 以为 throws 会自己抛异常
✅ 不会,必须有 throw
❌ 抓住异常但什么都不做
try {
read();
} catch (Exception e) {
// 空 catch,调试地狱
}
✅ 至少打印或往上抛
log.error("读取失败", e);
throw new BusinessException("业务失败", e);
调试 throws 的关键:找到 throw 的位置,看堆栈,用 IDE 异常断点。
如果你愿意,可以把具体的异常代码或报错信息贴出来,我可以直接帮你定位问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。