什么是受检异常和非受检异常?
受检异常(Checked Exception),表示的是在编译的时候,要强制检查的异常。
这种异常需要通过 try/catch 进行捕获,或通过 throws 去抛出去,否则程序无法通过编译。
除了 RuntimeException 及其子类以外,其他的 Exception 类及其子类都属于受检异常 。
非受检异常
非受检异常(UnChecked Exception),表示的是在编译的时候,不需要强制检查的异常,不会报错。
RuntimeException 及其子类都统称为非受检查异常,常见的有
异常 |
说明 |
NullPointerException |
空指针错误 |
IllegalArgumentException |
参数错误 |
ArrayIndexOutOfBoundsException |
数组越界错误 |
ClassCastException |
类型转换错误 |
finally一定会被执行吗?
finally 是一个关键字,用于定义一个代码块,该代码块中的代码无论是否发生异常都会被执行。一般用于释放资源或者进行清理操作,以确保在程序发生异常时资源被正确地关闭。
正常情况下,无论try块中的代码是否发生异常,finally块中的代码都会被执行。有些特殊情况可能不被执行,如下:
在try块中调用了System.exit()导致程序终止;
在try块或catch块中发生了无限循环或死循环,导致程序无法正常结束;
在try块或catch块中调用了Thread.stop()导致线程被强制终止。