在 Java 里,throws 和 throw 经常被混淆,我分开说一下,并给出“怎么处理”的常见做法。
public void checkAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("年龄必须大于18");
}
}
必须在调用处捕获或继续抛出
try {
checkAge(15);
} catch (IllegalArgumentException e) {
System.out.println("出错:" + e.getMessage());
}
public void readFile() throws IOException {
FileInputStream fis = new FileInputStream("a.txt");
}
try {
readFile();
} catch (IOException e) {
e.printStackTrace();
}
public void test() throws IOException {
readFile();
}
⚠️ 最终必须有人 catch,否则程序会崩溃。
如 IOException、SQLException
✅ 必须 throws 或 try-catch
如 RuntimeException、NullPointerException
❌ 不强制 throws,但也可以写
✅ 该处理就处理(业务逻辑错误)
✅ 处理不了再 throws
✅ 不要吞异常(空 catch)
✅ 自定义异常更清晰
throw new BusinessException("用户不存在");
throw 是“抛”
throws 是“说我会抛”
try-catch 才是“处理”
如果你有具体代码或场景(比如 Spring、接口、线程),我可以帮你针对性改。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。