Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用抛出将异常传播到被调用的方法_Java_Exception - Fatal编程技术网

Java 使用抛出将异常传播到被调用的方法

Java 使用抛出将异常传播到被调用的方法,java,exception,Java,Exception,堆栈跟踪如下所示: c b a main 假设c正在抛出FileNotFoundException。我使用抛出将此异常传播到b。我将异常从b传播到a,从a传播到main 当我在main中使用throws FileNotFoundException时,异常将传播到哪里 因为我没有在main中为FileNotFoundException定义catch,而只是将.抛出到Java运行时,它将打印堆栈跟踪并中止程序 我很好奇是什么导致了这个问题。你试过密码了吗?您在哪里被它的行为弄糊涂了?到Java运行

堆栈跟踪如下所示:

c
b
a
main
假设c正在抛出FileNotFoundException。我使用抛出将此异常传播到b。我将异常从b传播到a,从a传播到main

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


因为我没有在main中为FileNotFoundException定义catch,而只是将.

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


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

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


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

异常将由JVM处理-它打印stacktrace并退出。这同样适用于运行时异常,这些异常在运行过程中没有被捕获。

该异常将由JVM处理-它打印stacktrace并退出。这同样适用于运行时异常,这些异常在上升过程中没有被捕获。

未捕获的异常最终将由执行代码的线程的UncaughtExceptionHandler处理。Thread类具有为未捕获异常设置处理程序的方法。的文档说明了该过程:

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

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

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


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

未捕获的异常最终将由执行代码的线程的未捕获的异常处理程序处理。Thread类具有为未捕获异常设置处理程序的方法。的文档说明了该过程:

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

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

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


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

我读过一些类似于调用方法的内容,当被调用的方法抛出一些异常时,调用方法应该处理异常。但是在调用方法中,我刚刚声明了异常。我怀疑声明本身是否足以处理异常。好吧,调用方法通过说“不”来处理异常,不涉及这个,打电话给我的人必须处理。是的,够了。这样做是否正确取决于具体情况。谢谢,Sebastian。所以当我们在main方法上使用throws时,异常将由JVM处理。是的,正如我所说:它将打印堆栈跟踪并中止程序。正如Joni正确指出的那样,它只调用未捕获的异常处理程序,而未捕获的异常处理程序就是这样做的。这就是处理。您似乎对异常的处理有着特殊的意义,比如有必要调用一个特殊的函数来表示,这个异常现在已经被处理了。你没有。当你捕捉到一个异常并且不再重复它时,它被处理了。声明一个throws子句并不意味着该方法不能捕获异常。我读过一些类似的内容,比如调用方法时应该处理异常。但在调用方法时,我只是声明了异常。我怀疑声明本身是否足以处理异常。嗯,cal
ling方法通过说“不”来处理异常,不涉及这个,无论是谁打电话给我都必须处理。是的,够了。这样做是否正确取决于具体情况。谢谢,Sebastian。所以当我们在main方法上使用throws时,异常将由JVM处理。是的,正如我所说:它将打印堆栈跟踪并中止程序。正如Joni正确指出的那样,它只调用未捕获的异常处理程序,而未捕获的异常处理程序就是这样做的。这就是处理。您似乎对异常的处理有着特殊的意义,比如有必要调用一个特殊的函数来表示,这个异常现在已经被处理了。你没有。当您捕获到异常并且不重试它时,它就被处理了。声明throws子句并不意味着该方法不捕获异常。谢谢。因此,当main方法在不使用catch处理的情况下抛出异常时,根据我的示例,aas会抛出catch,异常将由JVM处理。如果我错了,请纠正我。谢谢。因此,当main方法抛出异常而不使用aas根据我的示例抛出的catch进行处理时,异常将由JVM处理。如果我错了,请纠正我。