在 Java 中,throws 用于方法声明上,表示“这个方法可能会抛出某种异常,但我不在这里处理,交给调用者处理”。
下面从什么时候用、怎么用、和 throw 的区别几个方面说明。
Java 规定:
try-catch 捕获throws 往外抛✅ 示例:
public void readFile() throws IOException {
FileReader reader = new FileReader("a.txt");
}
IOException 是受检异常,所以必须 throws 或 try-catch
适用于:
✅ 示例:
public User findUser(int id) throws UserNotFoundException {
if (id <= 0) {
throw new UserNotFoundException();
}
}
常见于:
service.getUser(); // 可能 throws Exception
❌ 错误示例:
class A {
void test() throws IOException {}
}
class B extends A {
void test() throws Exception {} // 编译错误
}
| 关键字 | 位置 | 作用 |
|---|---|---|
throw |
方法内部 | 真正抛出异常对象 |
throws |
方法声明处 | 声明可能抛出的异常 |
✅ 示例对比:
public void test() throws RuntimeException {
throw new RuntimeException("出错了");
}
❌ 以下情况不建议用:
try-catch 处理了异常throws Exception(太宽泛)✅ 推荐:
public void save() throws SQLException {
// dao 操作
}
✅ 更推荐(现代写法):
public void save() {
try {
// dao
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
或自定义业务异常:
throw new BusinessException("保存失败");
throws 用于“我可能会抛异常,但我不处理,交给调用者”
throw 用于“我现在就抛一个异常”
如果你愿意,我也可以结合 Spring / Web 项目 或 面试角度 再讲一版。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。