关于try-catch-finally需要注意的地方
首先是try-catch-finally的完整版
1、try里有异常,catch抓住异常,finally执行。
2、try里无异常,finally执行。
3、try中有异常,catch中return,finally执行。
4、try中有异常,catch中return,finally尝试改变catch中返回的变量,结果发现无法改变。
原理:finally语句有一个执行细节,如果在try或者catch语句内有return语句,则return语句在finally语句执行结束后才执行,但finally并不能改变返回值。执行过程是,在执行到catch内的 return i; 语句前,会先将返回值 i 保存在一个临时变量中,然后才执行finally语句,最后catch再返回那个临时变量,finally中对 i 的修改不会被返回。
5、try中有异常,catch中有return,finally中有return。
6、finally中抛出异常会覆盖之前的异常。
7、可以使用finally返回正常值,是catch中的异常不会抛出。
catch语句不是必须的。没有catch语句的运行结果也和前面7种情况类似。
8、try中return不抛出异常,finally执行。
9、try中return抛出异常,finally执行。
10、finally尝试改变try中返回的变量,发现无法改变。原理与之前4中说的相同。
11、使用finally覆盖try中抛出的异常。
12、可以使用finally返回正常值,使try中异常不会抛出。