当我抓住它时,我可以再次抛出异常吗?

时间:2015-02-18 12:26:50

标签: java exception-handling try-catch

try{
      WebElement naimi_logo = firefox.findElement(By.xpath("//a[@href=\"/astana/\"]/img") ) ;

      naimi_logo.click();


  }catch( IllegalStateException e){
      throw new IllegalStateException("this image is not clickable!") ;
  }
  catch(NoSuchElementException e){
      throw new NoSuchElementException("logo is not found!!") ;
  }

我应该在catch块中抛出异常吗?或者只是打印出控制台发生的事情会更好吗?

捕获的顺序是否重要?

2 个答案:

答案 0 :(得分:2)

看起来您的意图是在发生异常时添加更多信息。在那种情况下你正在做的很好。但是,您将失去基础异常的完整堆栈跟踪。

您可以使用:

java.lang.RuntimeException.RuntimeException(String, Throwable)

如果您不想丢失原始异常的堆栈跟踪。

答案 1 :(得分:1)

  

当我抓住它时,我可以再次抛出异常吗?

只需重新抛出你做的例外

throw e;

另一方面,这相当于根本没有捕获异常并让它传播。

也许您希望为异常提供更好的消息,但保留异常类。您通常会这样做:

}catch( IllegalStateException e){
    throw new IllegalStateException("this image is not clickable!", e);
}
catch(NoSuchElementException e){
    throw new NoSuchElementException("logo is not found!!", e);
}
  

我真的应该在我的catch块中抛出异常吗?

这取决于您的方法的目的。你的选择基本上是

  • 优雅地捕获和处理异常。即使出现“内部”异常,您的方法也可以正常完成。
  • 捕获异常并将其包装在另一个更适合您的抽象级别的异常中。
  • 让异常传播。