
[英]Why is UnknownHostException not caught in Exception (java)?
[英]Why was this exception not caught
我有以下代码
try {
xpathInstance = XPath.newInstance(xpathExpr);
list = (Text) xpathInstance.selectSingleNode(doc);
} catch (JDOMException e) {
throw new Exception(e);
}
我忘记包含一个依赖于 jdom.jar 库的库。 当我运行应用程序时,我看到了这个错误。
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at org.jdom.xpath.XPath.newInstance(XPath.java:134)
at com.myapp.parser.GenericXMLParser.getSingleNodeValue(GenericXMLParser.java:63)
根据 JDOM 文档, newInsance() 方法会抛出 JDOMEXCeption 所以它不应该捕获错误吗?
另外,我怎样才能避免必须添加一个 catch(Exception e) 子句来避免未知异常。
谢谢
构造函数不会引发此异常。 它是由 class 加载程序提出的。 当它试图在构造函数运行之前很久加载您的 class 时,未找到 class 并且此异常(没有 Class 定义发现错误)已引发您尚未处理(BTW 错误无法处理)。
我忘记包含一个依赖于 jdom.jar 库的库。 当我运行应用程序时,我看到了这个错误。
您在为 class 引发的运行时错误中看到的错误,该错误应位于CLASSPATH中但未找到。 如果jdom.jar
确实包含org/jaxen/NamespaceContext
class 那么应该可以解决这个问题。
根据 JDOM 文档, newInsance() 方法会抛出 JDOMEXCeption 所以它不应该捕获错误吗?
不,这不是JDOMException
,而是NoClassDefFoundError
,因此它不会捕获它。 最重要的是,这发生在 JDOM class 出现之前 - 在 class 加载期间发生。
另外,我怎样才能避免必须添加一个 catch(Exception e) 子句来避免未知异常
一般来说,您不应该尝试捕获NoClassDefFoundError ,因为它是一种错误,属于failures from which recovery is not feasible
类别。 您可以尝试通过使用反射和捕获ClassNotFoundException
来解决它,但正如我所说的一般,这是一个您无法从中恢复的异常,因此尝试捕获它可能是一个有争议的问题。
它没有被抓住,因为它没有被扔掉。 抛出的异常是java.lang.NoClassDefFoundError
如果你想捕捉一个异常,你必须捕捉它。 您无法采取任何措施来避免这种情况,这会破坏整个异常点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.