在 Java 里,throws 声明的异常能不能“免”,要看是哪种异常以及使用场景。
throws 或 try-catchthrows例如:
IOException
SQLException
public void read() throws IOException {
// 可能抛 IOException
}
✅ 必须二选一:
throws 往上抛try-catch 捕获❌ 不能不写也不捕获
例如:
NullPointerException
IllegalArgumentException
public void test() {
throw new RuntimeException("error");
}
✅ 不需要 throws
✅ 编译器不强制处理
public void test() {
throw new RuntimeException(new IOException());
}
⚠️ 不推荐滥用(语义错误)
public void read() {
try {
Files.readAllBytes(Path.of("a.txt"));
} catch (IOException e) {
// 处理或忽略
}
}
Files.readString(Java 11+ 仍可能抛)@SneakyThrows
public void read() {
Files.readAllBytes(Path.of("a.txt"));
}
✅ 编译期“免 throws” ❌ 运行时仍会抛
Java 中 throws 不能“凭空消失”,只能转移或转换;受检异常必须处理,非受检异常天然可免。
如果你有具体代码场景(比如接口、Spring、线程),我可以给你最合适写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。