在 Java 里,throws 要写,核心原因是:Java 的受检异常(checked exception)强制要求你“声明或处理”。
下面分点说清楚。
throws 是“异常声明”,不是“抛出异常”很多人误以为 throws 是“把异常抛出去”,其实:
throw:真正抛出异常对象throws:声明这个方法可能会抛出什么异常public void read() throws IOException {
throw new IOException();
}
throws?Java 把异常分成两类:
| 类型 | 是否必须处理/声明 |
|---|---|
| 受检异常(IOException 等) | ✅ 必须 |
| 非受检异常(RuntimeException) | ❌ 不必须 |
如果你调用的方法可能抛出受检异常,你有两条路:
try-catch 处理throws 继续往上抛// 不写 throws 会编译失败
public void test() throws IOException {
Files.readAllBytes(Path.of("a.txt"));
}
throws 是方法签名的一部分,相当于契约:
public User load() throws SQLException
调用者一看就知道:
“我得处理数据库异常”
否则调用方根本不知道要防范什么。
比如:
main
↓
service
↓
dao
如果 dao 抛 SQLException,但你不想在 dao 里处理,就可以:
dao → throws
service → throws
controller → try-catch
throws?public void test() {
throw new NullPointerException();
}
不需要 throws
public void test() {
try {
Files.readAllBytes(Path.of("a.txt"));
} catch (IOException e) {
// 处理了
}
}
throws 会自动抛异常不会,throws 只是“允许抛”。
throws Exception不推荐,太宽泛,调用者无法针对性处理。
Java 要求
throws,是为了在编译期就明确“谁该为异常负责”。
如果你愿意,我也可以讲:
throws vs throwthrows我可以继续。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。