您的位置:首页 > 其它

关于 try catch finally的运行流程

2016-08-02 19:36 225 查看
在开始先介绍一下try catch  finally的基本运行流程。

在try语句块中,放入的是你感觉会出现错误的代码,在catch语句块中放入的就是如果try语句块中的代码抛出异常之后所要执行的代码。

举一个简单的例子,如下图:



在这个程序中,如果按照正常的执行顺序去执行,那么最后的输出结果应该是


而在上面的程序中最后的输出结果是:错误。这就说明了在try catch中,如果try语句块中的程序出现了异常,程序不会终止,而是会继续执行catch语句块中的代码。而如果try中的代码没有错误,那么就会默认跳过catch语句块,不再执行其中的代码。

关于try catch finally

上面也介绍过了try catch的运行流程,下面介绍一下try catch finally的运行流程。啥也不说,先上图。



try catch finally的运行流程大致分为三种:

第一种就是正常执行,代码1没有抛出异常,程序的执行顺序就是代码1,代码2,代码4,代码5,。因为没有抛出异常所以跳过了catch语句块。

而第二种又可以细分为两种情况:

1.代码1抛出异常,被catch语句块捕获,而catch语句块中的代码没有抛出新的异常,这样的执行顺序就是代码1,代码3,代码4,代码5.

2.代码1抛出异常,catch语句块捕获并抛出新的异常,这时候的执行顺序应该为代码1,代码3,代码4,并抛出异常。不执行代码5。

第三种情况就是:代码1抛出异常,而catch语句块没有与之匹配的异常,那么它的执行顺序就是代码1,代码4.并将异常返回给方法调用者。不执行代码5。

总结:try语句块用于测试代码是否存在异常。如果没有抛出异常。程序正常运行,如果某一段代码出现异常,则立即终止try语句块的运行,并向catch语句块抛出异常。

而catch语句块则是为了能够让代码能够顺利运行下去,不会因为try语句块中的异常而终止整个程序。并接收try语句块所抛出的异常。

finally语句块则是必定要执行的语句块,不论是否会抛出异常,一定会被执行。

而finally后面的代码则会在catch语句块与try语句块所抛出的异常无法匹配或抛出新异常时无法调用。

以上就是我对try catch finally运行流程的理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  try catch finally