1

堆栈跟踪如下:

c
b
a
main

假设c是 throwing FileNotFoundException。我将此异常传播到busing throws。我正在从btoa和 from ato传播异常main

当我throws FileNotFoundException在 main 中使用时,异常会传播到哪里?

因为我没有catch在 main for 内部定义FileNotFoundException,而只是throws.

4

3 回答 3

3

到 Java 运行时,它将打印堆栈跟踪并中止程序。

(我很好奇是什么导致了这个问题。你试过代码了吗?你在哪里被它的行为弄糊涂了?)

于 2013-08-28T09:24:00.497 回答
3

未捕获的异常最终将由UncaughtExceptionHandler正在执行代码的线程处理。该类Thread具有设置未捕获异常处理程序的方法。的文档Thread#setDefaultUncaughtExceptionHandler解释了该过程:

未捕获的异常处理首先由线程控制,然后由线程的ThreadGroup对象控制,最后由默认的未捕获异常处理程序控制。如果线程没有明确的未捕获异常处理程序集,并且线程的线程组(包括父线程组)没有专门化其方法,则将调用uncaughtException默认处理程序的方法。uncaughtException

通过设置默认的未捕获异常处理程序,应用程序可以更改那些已经接受系统提供的任何“默认”行为的线程处理未捕获异常的方式(例如记录到特定设备或文件)。

如果没有设置其他未捕获的异常处理程序,则 inThreadGroup将异常的堆栈跟踪打印到System.err.

规范似乎没有说明哪个线程应该执行未捕获的异常处理程序,但在 Oracle/OpenJDK JVM 上,它是即将终止的线程(即引发异常的线程)。

于 2013-08-28T09:36:12.850 回答
2

异常将由 JVM 处理 - 它打印堆栈跟踪并退出。这同样适用于在上升过程中没有被捕获的运行时异常。

于 2013-08-28T09:25:24.733 回答