当前位置: 首页 > 面试题库 >

未捕获的RuntimeException和finally子句:哪个先出现?

祁正阳
2023-03-14
问题内容

在子句调用时,将A RuntimeException扔入try块中而不被捕获。finally``System.exit()

public static void main(String[] args) {
    try {
        Integer.valueOf("NotANumber");
    } finally {
        System.out.println("finally");
        System.exit(0);
    }
}

输出是

finally

如果System.exit(0)从最后删除,则输出为

finally
Exception in thread "main" java.lang.NumberFormatException: For input string: "NotANumber"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:449)
    at java.lang.Integer.valueOf(Integer.java:554)
    at exception.MyExcepTest.main(MyExcepTest.java:20)

在的消息之前,之后或之间可能出现 “最终” 的地方NumberFormatException

有人可以解释吗?


问题答案:

肯定会在main方法退出之前执行finally块,然后由JVM打印stacktrace。

也许stacktrace被打印到System.err,并且两个流以不可预测的方式混合在控制台输出中(因为它们基本上是同时产生的)。

当您也将“最终”打印到System.err时,会发生什么?



 类似资料:
  • 问题内容: API文档说永远不要捕获 Throwable 子类 错误 ,这表示异常行为。这是否意味着错误和异常之间的隔离是为了告诉程序员应该捕获哪个子类,而不应该捕获哪个子类?还是还有更多呢? 问题答案: 通常,这是严重错误(通常 在平台本身内部 ),您无法想象得到处理。我曾经关心醒目的唯一时间是为了 记录它 ,下面我再重新抛出。 这是非常重要的,因为它很容易让错误(和运行时异常),以这样的方式,

  • 我已经研究了几个类似问题的答案,但在我的案例中没有任何效果。仅供参考,这是我在Laravel 7中的第一个项目,在我的Mac上运行良好。在本文之后,我已经在我的服务器上部署了该项目。在web上运行项目时,出现以下错误: 致命错误:未捕获运行时异常:尚未设置外观根。在/usr/www/users/utopiqwvpw/vendor/laravel/framework/src/Illuminate/S

  • 问题内容: 我了解到,在Python中执行命令时,应该使用子进程。我想要实现的是通过ffmpeg对文件进行编码,并观察程序输出,直到文件完成。Ffmpeg将进度记录到stderr。 如果我尝试这样的事情: 调用child.communicate()后,程序无法继续执行,并等待命令完成。还有其他方法可以跟踪输出吗? 问题答案: communication()阻塞直到子进程返回,所以循环中的其余各行仅

  • 问题内容: 在大学里有关Java的问题中,有以下代码片段: 我被要求提供其输出。我回答了,但是正确答案是。为什么会这样呢?我只是不明白MyExc2去哪了。 问题答案: 通过阅读你的答案并了解你可能的想法,我相信你认为“进行中的例外”具有“优先权”。记住: 当一个新的异常被抛出到一个catch块或将要传播到该块之外的finally块中时,当新的异常向外传播时,当前异常将被中止(并被遗忘)。与其他任何

  • 问题内容: 在最近的项目中,我建议在测试工具代码中捕获RuntimeException并将其记录下来。该代码处理来自数据库的一系列输入,并且我不希望由于任何一个输入(空值,非法参数等)失败而导致测试停止。不用说,我的建议引起了热烈的讨论。 捕获任何一种RuntimeException是否可以接受?如果是,那么可以捕获RuntimeExceptions的其他方案还有哪些? 问题答案: 捕获此异常的原

  • 问题内容: 我正在扩展Chrome。好。将tampermonkey脚本转换为chrome扩展程序。我运行它,并在chrome控制台中给出以下错误: 是什么导致此问题? 尝试将我的代码包装在IIFE代码中: 尝试IIFE方法时出现以下错误: 问题答案: 你不能返回,除非你在一个函数中 您可以将所有代码包装在IIFE中 或者