捕获UnknownHostException,这是异常的原因

时间:2016-01-28 13:07:03

标签: java exception

在感兴趣的程序中,在执行方法()期间,可能会发生一些与HTTP相关的异常。由于某些原因,该方法被设置为能够抛出ExpException。我的兴趣只在于特定类型的异常,即UnknownHostException,可以使用

访问
if (e.getCause().getCause().getCause() instanceof UnknownHostException)

我希望你同意这是非常讨厌的方式。因此,这很好用:

public class ExportException extends Exception;

class sth{
  method() throws ExpException;
}

class main{
  try{
    method()
  } catch(ExpExceptione e){
    if (e.getCause().getCause().getCause() instanceof UnknownHostException){
        doSthElse();
    }
  }

然而,我希望如下所述。不幸的是,Eclipse大叫

  

UnknownHostException的无法访问的catch块。这个例外是   永远不会从try语句中抛出。

对我有什么帮助吗?我不想使用getCause()^ 3。

另外一个:这是一个很大的项目,我是新手,我宁愿不打扰外面的课程,而只是"主要"。

我的程序类似于:

public class ExportException extends Exception;

class sth{
  method() throws ExpException;
}

class main{
  try{
    method()
  } catch(UnknownHostException e){
    doSth();
  } catch(ExpExceptione){
    doSthElse();
  }

1 个答案:

答案 0 :(得分:2)

UnknownHostException是IOException的子类型,它被检查为异常。

抛出已检查异常的方法必须throws声明中声明它们。

因此,当您在声明中调用一个没有throws UnknownHostException的方法时,您将永远不会捕获此异常 - 代码无法访问且编译器正确。

Here您可以看到如何很好地检查异常原因是否包含任何特定异常。

static boolean hasCause(Throwable e, Class<? extends Throwable> cl) {
    return cl.isInstance(e) || e.getCause() != null && hasCause(e.getCause(), cl);
}

catch(ExpException e) {
    if (hasCause(e, UnknownHostException.class)) {
       doSmth();
    } else {
       doSmthElse();
    }
}