Java 异常处理细分为错误、已检查异常和未检查异常。这个问题是关于例外的。
正常的 Java 异常处理是为已检查的异常扩展 Exception 类,并通过考虑异常层次结构来根据需要处理这些异常。
例如:
public class ExceptionA extends Exception {}
public class RunClass {
public static void main() {
try {
RunClass runClass = new RunClass();
runClass.doSomething();
} catch(ExceptionA eA) {
// Do ExceptionA related resolutions.
} catch(Exception e) {
// Do Exception related resolutions.
}
}
public doSomething() throws ExceptionA {
throw new ExceptionA();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我看到了主要的 Spring 书籍,甚至在 Internet 教程中提到了 Spring-boot,并且在微服务的上下文中,即使使用 @ControllerAdvice 也总是从 RuntimeException 类扩展。
这明显违反了 Java 异常处理基础。但是仍然有一个说法是,它被扩展为 RuntimeException 因为这个异常是由@ExceptionHandler 方法处理的,并且它是在运行时生成和处理的。
尽管如此,由于 RuntimeException 的这个扩展使得编译时异常处理跟踪不可见,并且很难追溯异常是如何抛出的。由于这些原因,我仍然相信,遵循基本的Java已检查和未检查异常处理概念仍然使用@ExceptionHandler方法。 …