抛出异常是否一定会导致程序终止?

5

抛出异常是否必须导致程序终止?

我认为不是,只是想确保一下。


1
在哪种语言/环境下? - OrangeDog
5个回答

5

这取决于抛出异常的线程以及应用程序中同时运行的其他线程。

未捕获的异常会终止抛出它的线程。如果其余的线程只是守护线程,那么是的,应用程序将被终止。

根据 Thread.setDaemon(boolean) 文档:

当所有运行的线程都是守护线程时,Java虚拟机将退出。


3

在Java和.NET中,如果您不处理异常,它很可能会导致程序终止。

仅仅抛出异常并不会使程序终止。决定程序会发生什么取决于抛出异常后发生了什么。


3
不,这并不一定会导致程序终止。你可以捕获异常,并对其进行有用的处理,比如向用户显示发生错误及其原因的消息。

2
只有"未处理的异常"才会导致程序崩溃。要处理异常,请使用以下形式:
try {
        // May Throw ApocalypseException
        functionThatMightBlowUpTheWorld();
    }
catch (ApocalypseException e){
         System.err.println("We accidentally almost blew up the world because: ");
         System.err.println(e.message);
}

1
等一下...这段代码是从维基解密中拿来的吗?我认为这永远不应该被公开,永远!哈哈 - Buhake Sindi
3
我喜欢构思有趣的例子。 :) 但是,如果你在离心机上遇到微控制器方面的问题,我不负责任。 - EnabrenTane

2
未能捕获异常可能会导致程序终止,但抛出异常本身不会。至少,任何应用程序都应该有某种最后的防线来捕获所有未处理的异常并进行处理(即使对于某些异常而言,处理它们意味着将它们抛出应用程序之外并终止,因为某些外部因素需要这样做)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接