捕获Java错误

Jai*_*ung 25 java error-handling

我听说捕捉java.lang.Error被认为是不好的做法.我目前正在加载一个不保证在PATH上的.dll,并且想要在不是的情况下切换到用户配置的位置.

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

有没有更好的方法呢?或者是在UnsatisfiedLinkError这里接受?

Luk*_*uth 33

除了就如何在技术上克服这个问题提出建议之外,我想花点时间解释为什么它首先被认为是"不良做法".

让我们首先澄清一下这Error门课是什么.


在java中,抛出错误和异常(它们是主要类型).使用throw关键字完成以上操作之一.扩展基本的每个类java.lang.Throwable都可以抛出.

有两个类继承自基Throwable类:ExceptionError.这两者之间的区别在他们的文件中解释:

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

资源

Exception及其子类是Throwable的一种形式, 它表示合理的应用程序可能想要 捕获的条件.

资源


如上所述,错误和异常因其起源不同而分开.一个Error通常指示的一个问题,它的应用程序不能从恢复.因此,他们不应该被抓住.

对于a来说也是如此RuntimeException,但它用于指示高级层的问题(例如方法).而Error指示低级问题(例如运行时).


所以,既然你明白你只能捕获你能够从中恢复的异常和错误,那么你的问题的答案应该是清楚的.

是的,抓住它是完全合理的UnsatisfiedLinkError,因为您的应用程序可以从中恢复.


我在上面的博客文章中介绍了上面的内容(更详细和示例)以及一些扩展信息.