目录
前言
代码执行流程 模型图
代码应该怎么写?
前言
编码时,始终牢记两个要点:1、主流程 2、异常监听。
代码执行流程 模型图
代码执行流程:1、正常执行; 2、异常执行。
老规矩,首先在脑海中建立一个‘代码执行流程链路’模型:
①主流程:主流程包括ABC三个节点;
②异常流程:异常流程可能在ABC任意一个节点发生,当他发生的时候整个代码执行流程【可能】要改变;
- 如果该异常和 主业务 无关,可以直接吃掉这个异常然后代码执行流程不变(ABC);
- 如果该异常和 主业务 有关,一旦发生则后续流程无法执行(AB)。
思考:
1、C流程会被执行到吗?
-- 不一定。因为A、B其中任意一个发生异常 + 程序中开发人员根据A、B业务重要程度对异常的处理方案 ,可能造成 C执行不到。
2、如何让C流程一定被执行?
-- 对A、B流程进行 异常监听(try catch finally)。 将C流程放到finally里面,或者如果AB流程都没有return操作,C流程可以放到try catch外面。
// C放到finally里面
try{
// 执行A
...
// 执行B
...
return ;
} catch (Exception e) {
log.error("error");
} finally {
// 执行C
...
}
// C放到try catch外面
try{
// 执行A
...
// 执行B
...
} catch (Exception e) {
log.error("error");
}
// 执行C
...
代码应该怎么写?
写代码有个很大的忌讳:上来就开始写 细节 代码。比较正确的写代码方式如下:
1、定义大纲
先定义代码大纲目的是:这是一种 约束。它规定了代码执行的流程;
//1. ‘注释’形式定义代码【正常执行】流程
void m () {
// A
// B
// C
}
//2. 根据真实‘业务场景’判断每个流程是否进行【异常监听】,考虑异常时是否【提前结束程序】
下面代码模拟场景:A流程如果异常直接提前结束程序;B流程出现异常不要影响后续流程;C流程执行且不进行异常监听;
void m () {
// A
try{
// B
} catch(Exception e) {
log.error("error");
}
// C
}
2、分别对ABC流程进行代码细节填充。