温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Throws 抛出能免吗

发布时间:2026-10-27 16:47:01 来源:亿速云 阅读:82 作者:小樊 栏目:编程语言

在 Java 里,throws 声明的异常能不能“免”,要看是哪种异常以及使用场景。


一、结论先行

  • Checked Exception(受检异常):不能免,必须 throws 或 try-catch
  • Unchecked Exception(RuntimeException / Error):可以免,不需要 throws
  • 语法层面彻底“不写 throws”:只有不抛受检异常才行

二、详细解释

1️⃣ Checked Exception(必须处理)

例如:

IOException
SQLException
public void read() throws IOException {
    // 可能抛 IOException
}

✅ 必须二选一:

  • throws 往上抛
  • try-catch 捕获

❌ 不能不写也不捕获


2️⃣ Unchecked Exception(可以免)

例如:

NullPointerException
IllegalArgumentException
public void test() {
    throw new RuntimeException("error");
}

✅ 不需要 throws ✅ 编译器不强制处理


三、常见“免 throws”的手段

✅ 方法 1:改成 RuntimeException

public void test() {
    throw new RuntimeException(new IOException());
}

⚠️ 不推荐滥用(语义错误)


✅ 方法 2:try-catch 内部消化

public void read() {
    try {
        Files.readAllBytes(Path.of("a.txt"));
    } catch (IOException e) {
        // 处理或忽略
    }
}

✅ 方法 3:使用不抛受检异常 API

  • Files.readString(Java 11+ 仍可能抛)
  • 第三方封装库(如 Apache Commons IO)

四、特殊情况

Lombok @SneakyThrows

@SneakyThrows
public void read() {
    Files.readAllBytes(Path.of("a.txt"));
}

✅ 编译期“免 throws” ❌ 运行时仍会抛


五、总结一句话

Java 中 throws 不能“凭空消失”,只能转移或转换;受检异常必须处理,非受检异常天然可免。

如果你有具体代码场景(比如接口、Spring、线程),我可以给你最合适写法。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手