Java异常体系
Java异常体系的层次结构
Java异常体系的最顶层是Throwable类,Throwable类是Java语言中所有错误和异常的超类。
Throwable类有两个直接子类:Error和Exception
-
Error类:是程序运行时无法处理的问题,通常是严重的系统问题,如内存溢出(OutOfMemoryError)、栈溢出(StackOverflowError)、虚拟机错误(VirtualMachineError)等。错误无法在代码中捕获和处理。
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.
-
Exception类:是程序运行时可以捕获并且处理的问题,通常是由程序逻辑错误或者运行时环境问题引起的。Exception类分为运行时异常(RuntimeException)和非运行时异常(比如IOException、SQLException等)。
The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.
不受检查异常(Unchecked Exception)和检查异常(Checked Exception)
Throwable and any subclass of Throwable that is not also a subclass of either RuntimeException or Error are regarded as checked exceptions.
简单而言,Throwable和Throwable的任何子类,如果不是RuntimeException或Error的子类,都是检查异常。
反之,RuntimeException或Error的子类,都是不受检查异常。
异常处理机制
Java提供了几种处理异常的方式,包括捕获异常、声明异常和抛出异常。
-
捕获异常:使用try-catch语句块来捕获可能抛出异常的代码块。当try块中的代码发生异常时,程序将跳转到匹配的catch块进行处理。
-
声明异常:在方法签名中使用throws关键字声明方法可能抛出的异常。这样,调用该方法的代码就需要处理这些异常,要么通过try-catch捕获,要么继续声明抛出。
-
抛出异常:使用throw关键字显式抛出异常。这通常发生在检测到无法恢复的错误情况时,或者当需要将错误传递给上层调用者处理时。