在 Java 里,throws 有没有必要,取决于你处理的是哪种异常、以及你在哪一层代码里。
下面分情况说清楚。
throws 是干嘛的?throws 的作用是:把异常“抛给调用者”,自己不处理。
void read() throws IOException {
...
}
表示:
这个方法可能会抛出
IOException,但我不处理,谁调用谁处理。
throwsJava 规定:
Exception 的子类(除了 RuntimeException)try-catch,要么 throws例如:
InputStream in = new FileInputStream("a.txt"); // IOException
✅ 此时 throws 是“语法上必须”的
比如:
// 底层
void daoSave() throws SQLException { ... }
// 上层
void service() {
try {
daoSave();
} catch (SQLException e) {
throw new RuntimeException("保存失败", e);
}
}
✅ 这种分层设计里,throws 很常见、也很合理
框架通常不关心业务错误如何处理:
public static byte[] readAll(InputStream in) throws IOException
✅ 让调用者决定怎么办
throwsRuntimeException 没必要 throwsvoid check(int age) {
if (age < 0) throw new IllegalArgumentException();
}
✅ RuntimeException 不需要 throws(写了也没错,但没必要)
throws例如 Web 项目:
@GetMapping("/user")
public User get() throws Exception { ... }
❌ 不合理:
✅ 正确做法:
@ControllerAdvice)throws Exceptionvoid foo() throws Exception { ... }
❌ 问题:
✅ 推荐:
throws不是“有没有必要”,而是“该不该把异常交给别人处理”。
✅ 受检异常 → 必须 throws 或 catch
✅ 底层 / 框架 → 可以 throws
❌ 最上层业务 → 不要继续 throws
❌ RuntimeException → 不需要 throws
如果你愿意,可以把具体代码或场景(比如 Web、工具类、面试题)发出来,我可以直接帮你判断「该不该 throws」。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。