异常处理是在程序执行过程中遇到错误或异常情况时的一种机制,它允许程序在错误发生时进行适当的处理,而不会导致程序崩溃或产生不可预测的结果。
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
块进行捕获和处理。