温馨提示×

温馨提示×

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

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

java Throws 抛出为何失败

发布时间:2026-09-16 09:26:09 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,throws 本身不是“抛出异常”,而是“声明可能抛出的异常”。很多人说“throws 抛出失败”,通常是以下几种常见原因。


一、最常见的误解:throws 不会真正抛出异常

public void test() throws Exception {
    // 什么都没做
}

上面代码 只是声明 这个方法可能抛 Exception,但并没有真正抛出异常。

✅ 真正抛出要用 throw:

public void test() throws Exception {
    throw new Exception("出错了");
}

⚠️ 区别:

  • throws:方法签名上声明
  • throw:真正抛出异常对象

二、受检异常(Checked Exception)没处理也没声明

public void read() {
    new FileInputStream("a.txt"); // 编译错误
}

FileInputStream 会抛 IOException(受检异常),你必须:

✅ 方案 1:throws 声明

public void read() throws IOException {
    new FileInputStream("a.txt");
}

✅ 方案 2:try-catch 处理

public void read() {
    try {
        new FileInputStream("a.txt");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

三、throws 不能“跨层自动抛出”运行时异常

public void a() {
    b();
}

public void b() throws RuntimeException {
    throw new RuntimeException();
}

✅ 运行时异常(RuntimeException)不需要 throws,也不强制捕获
❌ 很多人误以为 throws 能“强制传播”


四、异常被 catch 吞掉了

public void test() throws Exception {
    try {
        throw new Exception("错误");
    } catch (Exception e) {
        // 什么都没做
    }
}

✅ 异常被 catch 后就不会再向外抛


五、main 方法抛异常“看起来没生效”

public static void main(String[] args) throws Exception {
    throw new Exception("失败");
}

程序会直接终止,并打印异常栈:

Exception in thread "main" java.lang.Exception: 失败

这不是失败,而是 Java 的正常行为。


六、子类重写方法不能抛出更宽的异常

class A {
    void test() throws IOException {}
}

class B extends A {
    @Override
    void test() throws Exception {} // ❌ 编译错误
}

✅ 子类只能:

  • 不抛
  • 抛相同或更窄的异常

七、你以为 throws 会中断程序,但其实没有

throws 不会中断程序,只是把异常交给调用者处理。


总结一句话

throws 只是“声明可能抛”,真正抛异常必须 throw

如果你愿意,可以把具体代码贴出来,我可以帮你精确指出“为什么没抛成功”。

向AI问一下细节

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

AI
助
手