为什么必须创建许多不同的异常类型?

时间:2018-10-31 22:58:05

标签: java

大多数时候,如果我想在某个关键时刻终止程序的执行,我只是创建带有一些参考消息的RuntimeException:

throw new RuntimeException("ERROR: this is wrong! Fix it first!")

在Java中,有许多不同的内置异常类型,并且书籍还教您如何创建自己的自定义异常类型。那真的有必要吗?从实用的角度来看,RuntimeException是否足以满足大多数目的?

3 个答案:

答案 0 :(得分:2)

大多数时候,如果我想在某个关键时刻终止程序的执行

大多数时候,我不想终止我的应用程序,但我想从异常中恢复以继续执行。

通常,您不必定义自己的异常,因为您可以(技术上)仅使用eg。 ExceptionRuntimeException,但是创建自己的异常类使您可以很好地捕获此类异常。例如

try{
   myService.doSomething();
}catch(MyCustomException){
 //handle custom exception here- eg.
  retunr Constants.DEFAULT_RESPONSE;
}catch(RuntimeException e){
  log.error("Unknown Error",e);
  return null;
}

因此在这种情况下,我允许自己从服务方法引发的异常中恢复,但同时我登录所有其他异常(返回null从来都不是最佳实践)

答案 1 :(得分:1)

我强烈不建议使用通用RuntimeExceptionException。这是为了使我们能够以不同的方式处理不同的异常。

例如,如果我遇到一个RuntimeException,如果是由于输入错误(我可以告诉用户修复他们的输入),磁盘错误(因此我们可以警告操作团队以便他们可以替换)或空指针(这显然是一个错误)。抛出和捕获通用RuntimeException使得这比实际需要的困难。

答案 2 :(得分:0)

具有不同类型的异常的一种有用方法是,您可以定义程序应如何响应抛出的特定异常。

try {
    // code that may throw several types of exceptions
} catch (Exception1 e) {
    // handle Exception1
} catch (Exception2 e) {
    // handle Exception2
} catch ...

通过这种方式,正在运行的程序可以从异常中恢复并可以继续运行。