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

捕捉Java错误

杜彦君
2023-03-14
问题内容

我听说捕捞java.lang.Error被认为是不好的作法。我当前正在加载一个不能保证在PATH上的.dll,并希望在不存在的情况下切换到用户配置的位置。

try {
    System.loadLibrary("HelloWorld");
} catch(UnsatisfiedLinkError ule){
    System.load("C:/libraries/HelloWorld.dll");
}

有更好的方法吗?还是在UnsatisfiedLinkError这里接受是可以接受的?


问题答案:

除了提供有关如何从技术上解决问题的建议以外,我想花点时间解释一下为什么它首先被认为是“不好的做法”。

让我们从澄清什么是Error类开始。

在Java中,将引发错误和异常(它们是主要类型)。通过使用throw关键字可以完成上述操作之一。可以扩展基础的每个类java.lang.Throwable

有两个从基本Throwable类继承的类:ExceptionError。两者之间的差异在其文档中进行了说明:

一个 错误 是的子类 的Throwable指严重的问题合理的应用程序不应该试图捕获。 大多数此类错误是异常情况。[…]

资源

Exception 类及其子类是 Throwable的 一种形式, 它 指示合理的应用程序 可能希望 捕获的条件。

资源

如上所述,由于错误和异常的来源不同,所以它们是分开的。一个Error通常指示的一个问题,它 的应用程序不能从恢复 。因此,它们不应被抓住。

对于,也是如此RuntimeException,但是它用于指示高层(例如方法)存在问题。而则Error表示存在低级问题(例如,运行时)。

因此,既然您了解到您将 只捕获能够从中恢复的异常和错误,那么 问题的答案应该很清楚。

是的,赶上是完全合理的UnsatisfiedLinkError,因为您的应用程序可以从中恢复。

我在Blog上的文章中介绍了以上内容(包括示例)和更多扩展信息。



 类似资料:
  • 我定义了一个自定义错误处理程序,它捕获所有异常并将其保存到日志中。现在,如果我在mysqli查询中出现语法错误,例如打字错误,页面将完全停止加载。没有引发异常,因此不会触发错误处理程序,也不会记录任何内容。 这正常吗?我是否应该检查PHP设置来修复此问题,以便任何mysqli查询错误都会引发异常? (如果查询返回0个结果,我不希望引发异常-仅当它由于键入错误或查询结构中的其他错误而出错时) 查询示

  • 我正在开发一个django应用程序,它可以与几个Amazon Web服务进行通信。 到目前为止,我在处理和捕获boto3客户端抛出的异常方面遇到了困难。我正在做的事情似乎不必要地单调乏味: 例子: 如果令牌坏了,这可能会抛出一个。 可能会抛出一个。 首先,我在代码中的任何地方都找不到这些错误,所以它们可能是在某个地方生成的。一句话:我不能像往常一样导入和捕获它。 其次,我发现了一种方法来捕获错误这

  • 在节点中。在js服务器上,捕获SIGTERM和捕获SIGINT有什么区别吗? 我认为进程不应该能够防止SIGINT关闭? 我是否能够捕获两个信号并阻止退出?我的实验表明答案是肯定的,但从我所读到的内容来看,SIGINT总是假设关闭一个进程。 或者我把SIGINT和SIGKILL混淆了?也许SIGKILL是我无法恢复的信号? 捕捉这些信号当然可以让我优雅地关机: 我想我把SIGINT和SIGKILL

  • 然后我把它用作: 但是最后一行代码没有捕获任何异常,我的代码给出运行时异常并停止。你能解释为什么会发生这种情况,如果可能的话,如何修复它吗?

  • 我的数据服务如下所示: 如果我得到一个HTTP错误(即404),我会从core得到一条令人讨厌的控制台消息:error error:Uncaught(promise):[object]。es5。在我的情况下,我该如何处理?

  • 问题内容: 在Java中是否有捕捉到内存不足错误()的问题? 问题答案: 是的 。以下是一些可能有意义的示例: 如果您想通过 优雅地关闭 程序来处理它 如果要向用户显示问题或 记录错误 根据您的设计,您甚至可以清理内存并 恢复工作状态 但是 ,请注意,通常情况下(除非您处在一次要分配大量内存的位置),对于这些情况,您可能不会专门捕获OutOfMemoryError,而是始终在顶部进行操作主要入口点