除了提供如何技术上克服问题的建议外,我想花一点时间,并解释为什么它被认为是“坏习惯”.
我们首先来澄清Error类是什么.
在java中,抛出错误和异常(这是主要的类型).通过使用throw关键字来抛出上述之一.可以抛出每个扩展基本java.lang.Throwable的类.
有两个类继承自Throwable的基本类:Exception和Error.他们在文件中解释了这两者之间的区别:
An Error is a subclass of Throwable that indicates serious
problems that a reasonable application should not try to catch. Most
such errors are abnormal conditions. […]
The class Exception and its subclasses are a form of Throwable
that indicates conditions that a reasonable application might want
to catch.
如上所述,由于不同的起源,错误和异常被分离.错误通常表示一个问题,应用程序无法从中恢复.所以不应该被抓住.
对于RuntimeException也是如此,但它用于指示高级层(例如方法)的问题.而错误表示低级问题(例如运行时).
所以,现在你明白你只能捕捉你能够恢复的例外和错误,你的问题的答案应该是明确的.
是的,捕获UnsatisfiedLinkError是非常合理的,因为您的应用程序可以从中恢复.
我在article on my Blog中介绍了上面的内容(更详细的例子)和一些扩展的信息.