在 Java 里,throws 能不能“省”,要看你抛的是什么异常,不能一概而论。
throwsthrows 声明try-catch 处理Java 把异常分成两类:
编译器强制你处理,否则代码编译不过
例如:
public void read() throws IOException {
new FileInputStream("a.txt");
}
如果你不写 throws IOException,也不 try-catch:
public void read() {
new FileInputStream("a.txt"); // ❌ 编译错误
}
编译器不强制处理
例如:
public void test() {
throw new RuntimeException("error");
}
✅ 完全合法,不需要 throws
public void method() {
if (true) {
throw new IllegalArgumentException("参数错误");
}
}
✅ 不用 throws
public void method() throws InterruptedException {
Thread.sleep(1000);
}
如果写成:
public void method() {
Thread.sleep(1000); // ❌ 编译错误
}
必须二选一:
throws InterruptedExceptiontry-catch可以,但只针对 受检异常转运行时异常:
public void read() {
try {
new FileInputStream("a.txt");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
✅ 这样调用方就“感觉不到”受检异常了
⚠️ 但这是设计选择,不是语法省略
Java 里
throws不能随便省,受检异常必须处理或声明,运行时异常可以省。
如果你愿意,可以贴一段代码,我帮你判断能不能省。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。