关于 try catch finally的运行流程
2016-08-02 19:36
225 查看
在开始先介绍一下try catch finally的基本运行流程。
在try语句块中,放入的是你感觉会出现错误的代码,在catch语句块中放入的就是如果try语句块中的代码抛出异常之后所要执行的代码。
举一个简单的例子,如下图:
![](https://img-blog.csdn.net/20160802195838959?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在这个程序中,如果按照正常的执行顺序去执行,那么最后的输出结果应该是
![](https://img-blog.csdn.net/20160802195526847?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
而在上面的程序中最后的输出结果是:错误。这就说明了在try catch中,如果try语句块中的程序出现了异常,程序不会终止,而是会继续执行catch语句块中的代码。而如果try中的代码没有错误,那么就会默认跳过catch语句块,不再执行其中的代码。
关于try catch finally
上面也介绍过了try catch的运行流程,下面介绍一下try catch finally的运行流程。啥也不说,先上图。
![](https://img-blog.csdn.net/20160802200645775?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
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语句块中放入的就是如果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运行流程的理解。
相关文章推荐
- 关于MFC的运行流程
- 关于 try catch finally的运行流程
- (转)关于ASP.net运行流程
- 关于 try catch finally的运行流程
- 关于 try catch finally的运行流程
- 关于 try catch finally的运行流程
- 关于 try catch finally的运行流程
- 关于 try catch finally的运行流程
- OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。 本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为R
- 关于ASP.net运行流程
- 关于 try catch finally的运行流程
- 关于 try catch finally的运行流程
- 关于 try catch finally的运行流程
- WebWork的运行流程
- 关于获取运行时类型
- 关于在开始运行中的命令新加的一点!
- 关于win2003 iis下ASP经常不行,HTM 和ASPX等可以运行的相关研究
- 关于DTS运行正常但JOB下运行出错相关问题的原因
- [读书笔记][深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白
- ASP.net运行流程