如果我从 main 中抛出一个未经检查的异常,那是否总是不会使程序崩溃。我之所以问,是因为我正在运行一个 GUI,并且它目前不会使程序崩溃。它们通常会崩溃还是仅在某些情况下崩溃?对于检查的异常和 GUI 也一样吗
堆栈溢出在我身上崩溃了,所以我没有意识到这个问题被发布了两次,我觉得有两个副本是错误的。这是同一个问题。
如果我从 main 中抛出一个未经检查的异常,那是否总是不会使程序崩溃。我之所以问,是因为我正在运行一个 GUI,并且它目前不会使程序崩溃。它们通常会崩溃还是仅在某些情况下崩溃?对于检查的异常和 GUI 也一样吗
堆栈溢出在我身上崩溃了,所以我没有意识到这个问题被发布了两次,我觉得有两个副本是错误的。这是同一个问题。
检查未检查的异常都会使主线程崩溃。但是,这并不意味着 JVM 会退出。当没有非守护线程正在运行时,JVM 退出。如果你正在运行一个 GUI 应用程序,那么 UI 事件循环是一个非守护线程,它将保持 JVM 运行直到它完成。
如果我从 main 中抛出一个未经检查的异常,那是否总是不会使程序崩溃。
从技术上讲,当 JVM 遇到严重的内部错误并将包含寄存器内容和各种其他晦涩内容的故障转储输出到文件中时,就会发生崩溃。
当主线程由于未捕获的异常而退出时,这不是崩溃。这是(从 JVM 的角度来看)有序的关闭。
Chandra 的回答解释了 JVM 关闭通常是如何发生的,尽管他没有提到调用System.exit()
是启动有序关闭的另一种方式。
使用 try-catch (Throwable t) 将 main 方法中的所有代码包装起来。这抓住了一切。