在java中扩展异常/RunTimeException?

2022-08-31 14:02:46

我有以下课程。

public class ValidationException extends RuntimeException {


}

public class ValidationException extends Exception {


}

我对自定义异常何时应扩展以及何时必须扩展感到困惑。您能解释一下直接扩展有什么缺点吗?RunTimeExceptionExceptionRunTimeException

谢谢!


答案 1

运行时异常处于未选中状态,而异常处于选中状态(调用代码必须处理它们)。

如果要取消选中自定义异常,则应扩展该异常,否则请使用 扩展它。RuntimeExceptionException

对于未检查的异常,调用代码方法不需要在其 throws 子句中声明其任何子类,该子类可能在执行方法期间引发但未捕获。RuntimeException

由于调用方法可能无法处理“RuntimeException”,因此在抛出 RuntimeException 时需要小心

运行时异常表示由编程问题导致的问题,因此,无法合理地期望 API 客户端代码从中恢复或以任何方式处理它们。这些问题包括算术异常,例如除以零;指针异常,例如尝试通过空引用访问对象;和索引异常,例如尝试通过太大或太小的索引访问数组元素。

运行时异常可能发生在程序中的任何位置,而在典型的程序中,它们可能非常多。必须在每个方法声明中添加运行时异常会降低程序的清晰度。因此,编译器不要求您捕获或指定运行时异常(尽管可以)。

来源/延伸阅读:未经检查的例外 - 争议


答案 2

如果扩展 ,则无需在 throws 子句中声明它(即它是一个未经检查的异常)。如果扩展 Exception,则执行(这是一个已检查的异常)。RuntimeException

有些人认为所有异常都应该从 扩展,但是如果要强制用户处理异常,则应进行扩展。RuntimeExceptionException