概览

在 Exception 异常中,大致又分为checked Exception(非运行时异常、受检异常)和 unchecked Exception(运行时异常、非受检异常)
受检异常
在程序编译阶段就要被检查出来并处理掉的(try~catch 或者在方法外面 throws),否则程序无法通过编译,比如 ClassNotFound、FileNotFoundException。
非受检异常
可以通过编译,但是会在程序运行过程中爆露出来,比如常见的空指针、参数错误、类型转换错误 。
try-catch-finally
try块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。catch块:用于处理 try 捕获到的异常。finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到 return 语句时,finally语句块将在方法 return 之前被执行。- finally 的代码在某些情况下也不是必须执行的,比如 JVM 终止、线程死亡。
throws 和 throw
- throws:用于在方法声明中声明可能抛出的异常类型。如果一个方法可能抛出异常,但不想在方法内部进行处理,可以使用 throws 关键字将异常传递(上抛)给调用者来处理,直至被 catch 或者抛给前端用户。
- throw:手动抛出异常。可以根据需要在代码中使用 throw 语句主动抛出特定类型的异常比如自定义异常。