处理已检查和未检查的异常?

时间:2013-12-19 10:11:49

标签: java exception exception-handling

我在下面有一个抛出Checked Exception的方法。

public class Sample{

 public String getName() throws CustomException{

  //Some code
   //this method contacts some third party library and that can throw RunTimeExceptions

}

}

CustomException.java

public class CustomException Extends Exception{
 //Some code


}

现在在另一个类中,我需要调用方法并处理异常。

public String getResult() throws Exception{
  try{
  String result = sample.getName();
   //some code
  }catch(){
     //here i need to handle exceptions
   }
  return result;
}

我的要求是:

sample.getName()可以抛出CustomException,它也可以抛出RunTimeExceptions

在catch块中,我需要捕获异常。如果捕获的异常是RunTimeException,那么我需要检查RunTimeException是否是SomeOtherRunTimeException的实例。如果是这样,我应该抛出 null

如果RunTimeException不是SomeOtherRunTimeException的实例,那么我只需要重新抛出相同的运行时异常。

如果捕获的异常是CustomException或任何其他Checked Exception,那么我需要重新抛出相同的内容。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

您可以这样做:

public String getResult() throws Exception {
    String result = sample.getName(); // move this out of the try catch
    try {
        // some code
    } catch (SomeOtherRunTimeException e) {
        return null;
    }
    return result;
}

将传播所有其他已检查和未检查的异常。没有必要抓住并重新抛出。

答案 1 :(得分:1)

你可以这样做:

catch(RuntimeException r)
{
     if(r instanceof SomeRunTimeException)
       throw null; 
       else throw r;
}
catch(Exception e) 
{
     throw e;
}

注意:Exception捕获所有异常。这就是为什么它放在最底层。