当前位置: 首页 > 知识库问答 >
问题:

未捕获Java异常

高兴贤
2023-03-14

为什么Java中的一些异常不被捕获(异常ex)捕获?这是完全失败的代码,有一个未处理的异常。(Java版本1.4)。

public static void main(String[] args) {
    try {
        //Code ...
    } catch (Exception ex) {
        System.err.println("Caught Exception");
        ex.printStackTrace();
        exitCode = app.FAILURE_EXIT_CODE;
    }
    finally {
        app.shutdown();
    }
    System.exit(exitCode);
}

我在线程“main”java中得到了一个异常。lang.NoSuchMethodError

但这行得通

public static void main(String[] args) {
    int exitCode = app.SUCCESS_EXIT_CODE;
    try {
        //Code ...
    } catch (java.lang.NoSuchMethodError mex){
        System.err.println("Caught NoSuchMethodError");
        mex.printStackTrace();
        exitCode = app.FAILURE_EXIT_CODE;
    } catch (Exception ex) {
        System.err.println("Caught Exception");
        ex.printStackTrace();
        exitCode = app.FAILURE_EXIT_CODE;
    }
    finally {
        app.shutdown();
    }
    System.exit(exitCode);
}

我在java中没有发现任何方法错误。lang.NoSuchMethodError:

我以为捕获异常会捕获所有异常?如何捕获java中的所有异常?

共有3个答案

裘嘉木
2023-03-14

例外只是一种可丢弃的东西;NoSuchMethodError不是一个例外,而是一个错误,这是另一种可丢弃的错误。

姜淇
2023-03-14

错误s不是异常s。

异常及其子类是Throwable的一种形式,表示合理的应用程序可能希望捕获的条件。

--JavaDoc for java。例外

错误是Throwable的一个子类,它表示合理的应用程序不应该尝试捕捉的严重问题。

--JavaDoc for java。错误

您可能希望捕捉某些错误,例如ThreadDeath。ThreadDeath被归类为错误,如下所述

线程死亡类特别是错误而不是异常的子类,尽管它是“正常出现”,因为许多应用程序捕获所有异常的出现,然后丢弃异常。

--JavaDoc for ThreadDeath

然而,由于Thread的stop()方法现在已被弃用,所以不应该使用它,因此永远不会看到ThreadDeath。

易英奕
2023-03-14

因为有些异常不是来自Exc0019-例如ThrowableError

基本上,类型层次结构是:

       Object
         |
      Throwable
     /         \
Exception      Error

只有Throwable和派生类可以被抛出,所以如果你捕获了Throwable,那真的会捕获所有东西。

ThrowableException以及从Exception派生的任何异常,而不是从RuntimeException派生的异常,都算作已检查的异常——它们是您必须声明要抛出的异常,或者如果调用抛出它们的东西,则必须捕获它们。

总之,Java异常层次结构有点混乱。。。

 类似资料:
  • 问题内容: 为什么Java中的某些异常未被捕获?这是代码由于没有处理的异常而完全失败。(Java版本1.4)。 我得到一个 但这有效 我懂了 我以为捕获异常会捕获所有异常?如何捕获Java中的所有异常? 问题答案: 因为某些异常不是源自-例如和。 基本上,类型层次结构是: 只能抛出派生类,因此,如果您抓住,那实际上就可以抓住一切。 ,以及任何异常,从获得 其他 比那些源自数作为 检查的异常 -他们

  • 我对Java线程、Runnable等相当陌生。因此,我想知道为什么下面的代码没有捕获异常? 阅读有没有一种方法可以使Runnable的run()引发异常,我收集到: "...如果您的run()方法确实是Thread的目标,则抛出异常是没有意义的,因为它是不可观察的;抛出异常与不抛出异常(无)具有相同的效果。"(@erickson) 我应该检查Runnable.run()方法中的异常。 为什么会这样

  • 我的用它的作用域启动coroutine 我的只处理一些逻辑,在本例中是某种验证器 然后我的只处理网络层/本地层 以下是我得到的错误日志: 错误直接指向显式的语句。

  • 我需要应用程序将错误写入位置。有没有我可以用Java异常处理做这件事?我已经在抛接IOerrors了,所以我不知道问题出在哪里……? 我正在从标准输入读取数据,并将其压缩并写入标准输出。 写入/dev/full不是引发异常...有没有关于如何引发异常的想法?

  • Twilio新手使用测试帐户。我按照这里列出的安装Twilio PHP的说明进行了安装:https://www.Twilio.com/docs/quickstart/php/sms 因为我得到了一个证书错误,所以我的主机提供程序建议我更改CURLOPT_SSL_VERIFYPEER=>false(从true改为true)。但现在我得到了这个错误。如何修复?:致命错误:未捕获异常“services_

  • @ControllerAdvice类是RestResponseEntityExceptionHandler.java。 我被告知,默认情况下spring boot应该返回如下所示的内容 我给它的不存在的路径是 我的控制器类是Breweries_Controller