在Java编程中,异常分为两大类:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。这两类异常的区别主要在于它们的处理方式和编译器的要求。
受检异常(Checked Exception)
- 定义:受检异常是在编译时被检查的异常。编译器会要求你必须处理这些异常,否则程序就不能编译通过。
- 处理方式:你必须使用
try-catch
块来捕获并处理这些异常,或者在方法声明中使用throws
关键字将异常抛出。 - 常见例子:
IOException
、SQLException
等都是受检异常。
举个例子,当你在程序中试图读取一个文件时,如果文件不存在,程序会抛出一个FileNotFoundException
,这是一个受检异常。你必须处理这个异常,否则程序无法编译通过。
非受检异常(Unchecked Exception)
- 定义:非受检异常是在运行时被检查的异常,编译器不会强制要求你处理这些异常。
- 处理方式:你可以选择处理这些异常,但编译器不会强制要求。即使你不处理这些异常,程序也可以编译通过,但在运行时可能会发生崩溃。
- 常见例子:
NullPointerException
、ArrayIndexOutOfBoundsException
、ArithmeticException
等都是非受检异常。
举个例子,当你试图访问一个空对象(即null
)的方法或属性时,程序会抛出一个NullPointerException
,这是一个非受检异常。你可以选择处理这个异常,但即使不处理,程序也能编译通过,只是在运行时会出现问题。
总结
- 受检异常:编译器强制要求你处理,常用于一些可预见的外部错误,比如文件操作、数据库操作等。
- 非受检异常:编译器不强制要求你处理,通常是由于编程错误导致的,比如空指针引用、数组越界等。