如何在java中处理异常

时间:2010-01-06 03:30:54

标签: java exception

所以我使用的是HtmlUnit,方法的签名如下:

public HtmlAnchor getAnchorByText(String text)
                           throws ElementNotFoundException

所以这意味着,对this方法的调用不仅会返回null,而且会抛出异常。

(我发现这很痛苦!!,在c#方法中,如果没有找到通常只返回null,除非我遗漏了什么,否则更容易?)

所以如果我不希望我的应用程序崩溃,我必须将此调用包装在异常中吗?

我如何用Java做到这一点?

参考:http://htmlunit.sourceforge.net/apidocs/index.html

2 个答案:

答案 0 :(得分:6)

请记住,ElementNotFoundException 是一个已检查的异常,因此您可以忽略它。但是如果不存在的元素是一个有效的情况,你不想抛出异常那么是的,你必须将代码包装在try-catch块中并处理它。

我也发现这种流量控制的例外情况很痛苦。你想要的基本结构是:

HtmlAnchor anchor = null;
try {
  htmlAnchor = getAnchorByText(text);
} catch (ElementNotFoundException) {
  // do nothing
}

如果你发现你自己编写了这个序列,那么用辅助方法包装它:

public static HtmlAnchor myFindAnchor(String text) {
  try {
    return getAnchorByText(text);
  } catch (ElementNotFoundException) {
    return null;
  }
}

并调用它而不是使用虚假的try-catch块乱丢你的代码。

答案 1 :(得分:1)

- 编辑:

见克莱图斯的回答;由于OP的描述,我认为这是一个经过检查的例外。

- 老回答:

你只需在它周围放一个try / catch(或者从你的方法中重新抛出它)。

它们在Java中称为“已检查”异常,通常被认为是错误:)(但这不值得在这里讨论)。

try {
    getAnchorByText(,,,)
} catch (ElementNotFoundException enfe) {
    ///
}

或投掷:

public void myFoo (...) throws ElementNotFoundException

我们的想法是,您不应该将异常传递到无法处理它们的地方(或者至少将它包装在可以处理的东西中)。您尝试将异常限制在应用中不同的“级别”。