在前面我写了一篇《java如何通过异常信息定位问题原因》,可以帮助大家通过异常定位问题所在。
不过我们在大部分的时候是不希望因为异常中断我们的业务流程。所以需要对可能发生的异常做一些处理,让业务可以不被中断,继续做处理,或者给出一些更为友好的响应消息。
这个时候就是java中的try、catch、finally大展身手的时候了。
说到try、catch、finally,大家看看下面这段代码,最后执行输出的结果应该是什么呢?
带着这个问题,我们往下看看吧。
01try
try是负责管理正常的业务逻辑的,一般是要把可能发生异常的业务逻辑代码包装在try对应的大括号包含的代码块中。
所以,try是一个一线工人。具体完成指定的工作。
02catch
catch,百度翻译的结果是“接住; 截住; 拦住”。catch的作用就是当try块中的代码抛出异常时,而这个异常又正好是自己负责的,那这个catch块就开始工作了。
所以,catch是流水线质检工人,只负责自己检验的那部分工作。
03finally
finally,是终于,最终的意思。就是不管try、catch做了什么事情,最后都要执行finally的内容。
所以,finally是这家企业的老板,是最后进行拍板定论的。
看了上面说的try、catch、finally他们三个各自的分工后,差不多应该可以分析出文章开头那段代码运行的结果了吧。
对了,运行的结果是输出“finally”
因为finally老板最终说了,按照我return的来。
那如果老板finally没有return呢。大家可以是试试把刚才那段代码finally中的return注释掉在运行。
是的,这个时候输出的就是“catch”了。
因为try块一线工人处理时抛出了异常,而这个异常又正好是这个catch流水线上值守的质检工人负责的,所以就按照这个质检工人提供的结论(return)。
04多个catch块
前面一直在说catch是流水线质检工人,可是代码上只有一个质检工人啊(catch)。
刚才是一个比较简单的企业,只安排了一个质检工人。下面看看有多个质检工人的流水线。
其中每个catch后面跟的异常类型,就是这个质检工人负责的异常类型。这个质检工人只负责try块抛出的这个类型的异常。
一个try是可以有多个catch块的。
05try、catch、finally是可以省略哪部分
只要是要涉及到对异常做处理,那一线工人肯定是少不了的,不能少了干活的啊。
所以try是不可以省略的。
有的老板崇尚无为而治,就说了,不需要我进行拍板了,但是也要注重质量。
所以,如果没有finally,则必须要有catch块。
有的企业的老板则是亲力亲为,可以不要catch快,但是必须要有老板来拍板,完成最终的定论。
也就是说,try必须有。
而catch、finally二者至少要有一个。
希望通过举的这些例子,帮助大家理解、记忆如何使用java的try、catch、finally。