异常处理是在程序执行过程中遇到错误或异常情况时的一种机制,它允许程序在错误发生时进行适当的处理,而不会导致程序崩溃或产生不可预测的结果。
Java异常体系是Java编程语言中用于处理错误和异常情况的层次结构。它是基于类的,并且所有的异常类都是从java.lang.Throwable类派生的。
java.lang.Throwable:
Throwable是Java异常体系的根类,它是所有异常类的基类。Throwable有两个子类:Error和Exception。java.lang.Error:
Error表示严重的系统级错误,通常由虚拟机引发。Error及其子类一般不被程序员捕获和处理,因为这些错误通常表示无法恢复的情况,如OutOfMemoryError、StackOverflowError等。java.lang.Exception:
Exception是所有非严重错误和异常的基类。Exception分为两种类型:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。受检异常(Checked Exception):
Exception类的子类,但不是RuntimeException的子类。IOException、SQLException等。非受检异常(Unchecked Exception):
RuntimeException类及其子类的实例。NullPointerException、ArrayIndexOutOfBoundsException等。
异常处理的关键字:
try:用于包含可能引发异常的代码块。catch:用于捕获并处理特定类型的异常。finally:用于定义在无论是否发生异常时都会执行的代码块。throws:用于在方法声明中指定可能抛出的异常。Java异常处理提供了多种方式来捕获、处理和传递异常。下面是Java异常处理的详细细节:
try-catch块:
try-catch块用于捕获和处理异常。
try块包含可能引发异常的代码。
catch块用于捕获并处理特定类型的异常。
语法:
try {
// 可能引发异常的代码
} catch (ExceptionType1 e1) {
// 处理 ExceptionType1 类型的异常
} catch (ExceptionType2 e2) {
// 处理 ExceptionType2 类型的异常
} finally {
// finally 块中的代码无论是否发生异常都会执行
}
catch块可以有多个,用于捕获不同类型的异常。
finally块中的代码无论是否发生异常都会执行,通常用于释放资源或进行清理操作。
异常传递:
当在当前方法中无法处理异常时,可以将异常传递给上层调用方法处理。
使用throws关键字在方法声明中指定可能抛出的异常。
调用方法可以继续传递异常,或在其内部使用try-catch块捕获和处理异常。
语法:
void method1() throws ExceptionType1, ExceptionType2 {
// 方法可能抛出的异常
}
void method2() throws ExceptionType1, ExceptionType2 {
method1(); // 异常传递给调用方法处理
}
finally块:
finally块中的代码无论是否发生异常都会执行。finally块通常用于释放资源、关闭文件、断开连接等清理操作,以确保代码执行完毕后资源得到正确释放。finally块中的代码都会被执行。throw语句:
throw语句用于显式地抛出异常。
可以使用throw语句在任何地方抛出异常,包括方法中、catch块中或finally块中。
语法:
throw exception;
throw语句通常用于在某些条件下抛出特定类型的异常,以使程序进入异常状态。
自定义异常:
Exception类或其子类来创建自定义异常类。try-catch块进行捕获和处理。