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

Java异步异常:是否可以捕获它们?

王经赋
2023-03-14
问题内容

我一直在阅读JLS,并且遇到了11.1.3节。我引用的异步异常是:

大多数异常是由于它们所发生的线程的操作而同步发生的,并且在程序中被指定为可能导致此类异常的某个点处发生。相反,异步异常是在程序执行的任何时候都可能发生的异常。

异步异常仅由于以下原因而发生:

[…]

* Java虚拟机中的内部错误或资源限制,阻止其实现Java编程语言的语义。在这种情况下,引发的异步异常是VirtualMachineError子类的实例。

是否有可能为了记录目的或通知而捕获此类异常(因为我认为这种事情不可恢复)?我怎样才能做到这一点?


问题答案:

您可以像其他任何异常一样捕获此类异常。唯一的问题是它们可能出现在程序的 任何
位置,因此很难可靠地捕获它们。基本上,您必须将run所有线程的main方法和该方法包装在一个try..catch块中,但是您不能对不受控制的线程(例如Swing
EDT或用于计时器的线程等)进行包装。

Error通常不建议同时捕获的任何子类,因为JVM可能处于不稳定状态,这可能导致进一步的失败(例如,对于OutOfMemoryError,您甚至可能没有足够的内存来处理异常)。但是,日志记录将是吸引Errors
的有效理由。

我建议的解决方案是为此使用未捕获的异常处理程序,方法是将其设置为默认异常处理程序。如果未在代码中捕获任何异常和错误,则在此处理程序中,您将获得所有异常和错误,并且可以尝试记录它们。



 类似资料:
  • 本文向大家介绍是否可以在单个catch块中捕获多个Java异常?,包括了是否可以在单个catch块中捕获多个Java异常?的使用技巧和注意事项,需要的朋友参考一下 例外是程序执行期间发生的问题(运行时错误)。发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行。 代码中有多个异常 在Java 7之前,只要我们有一个可能会生成多个异常的代码,并且如果您需要专门处理该代码,则应在一次尝

  • 这个问题不是关于Rollbar tho:)

  • 问题内容: 为什么Java中的某些异常未被捕获?这是代码由于没有处理的异常而完全失败。(Java版本1.4)。 我得到一个 但这有效 我懂了 我以为捕获异常会捕获所有异常?如何捕获Java中的所有异常? 问题答案: 因为某些异常不是源自-例如和。 基本上,类型层次结构是: 只能抛出派生类,因此,如果您抓住,那实际上就可以抓住一切。 ,以及任何异常,从获得 其他 比那些源自数作为 检查的异常 -他们

  • 我需要应用程序将错误写入位置。有没有我可以用Java异常处理做这件事?我已经在抛接IOerrors了,所以我不知道问题出在哪里……? 我正在从标准输入读取数据,并将其压缩并写入标准输出。 写入/dev/full不是引发异常...有没有关于如何引发异常的想法?

  • 为什么Java中的一些异常不被捕获?这是完全失败的代码,有一个未处理的异常。(Java版本1.4)。 我在线程“main”java中得到了一个 但这行得通 我在java中没有发现任何方法错误。lang.NoSuchMethodError: 我以为捕获异常会捕获所有异常?如何捕获java中的所有异常?

  • 问题内容: 我需要捕获两个异常,因为它们需要相同的处理逻辑。我想做类似的事情: 是否可以避免在每个catch块中重复处理程序代码? 问题答案: Java 7及更高版本 从Java 7开始,支持多异常捕获。 语法为: 的静态类型是列出的异常中最特殊的通用超类型。有一个很好的功能,如果您将其重新抛出,编译器就会知道只能抛出列出的异常之一。 Java 6及更早版本 在Java 7之前,有多种方法可以解决