异常处理机制

来源:互联网 发布:知乎回答被折叠 编辑:程序博客网 时间:2024/05/16 14:33

首先理解调用栈:

任何一次程序运行都是从主线程的主方法开始的,调用链路上的每一级既是下一级的调用者,又是上一级的被调用者。调用者等待被调用者的返回,方可继续执行。

但是被调方法中可能抛出异常,而中断程序运行。


我们可以在当前层级处理异常,也可以层层上报,直到调用栈上的某一个层级可以处理。

具体来说是三种选择:

1、捕获异常,在当前层级处理。

2、上报给调用者,使用throws声明异常列表。

3、捕获异常,做出当前层级可以做出的处理,在catch块中重新抛出异常,在方法后面throws声明异常列表,上报给调用者。


通俗来说:

1、我能处理;

2、我不能处理;

3、我只能处理一部分。


什么时候代码中要建立异常处理分支?

1、正在调用的方法显式声明了checked exception,当前代码必须做出反应,否则不能编译通过;怎么处理,参见上文三种方式。

2、测试过程发现,被调方法可能抛出运行期异常。

你希望程序就此终止,那么可以不做任何处理。

你希望建立分支应对此运行期异常,就捕获他。

通常,运行期异常无需处理。


关键字语义:

try:试运行

catch:出现匹配异常则捕获之

finally:无论是否出现异常,必须执行,通常用于清理资源

throw:手工抛出异常

throws:声明该方法可能抛出异常,需要上一级调用者注意