一、函数完全由try-catch-finally构成
public void tryCatch{
try {
//try statement 1
//try statement 2
} catch(ArithmeticException ex) {
//catch ArithmeticException statement 1
//catch ArithmeticException statement 2
} catch (Exception ex) {
//catch Exception statement 1
//catch Exception statement 2
} finally {
//finally statement 1
//finally statement 2
}
}
//finally内无return语句,try内必须有return语句,catch内return语句和throw语句必有其一;反之不成立
1、执行try语句块
- 执行try中的语句,1)try中的语句发生异常:匹配catch语句块,转至2,如果未匹配成功,转至4;2)try中的语句未发生异常:执行finally语句块,转至3。
- 如果最后一句是return语句,将return语句的结果保存在一个临时内存中;
2、执行catch语句块
- 执行catch中的语句
- 如果最后一句是return语句,将return语句的结果保存在一个临时内存中;
3、执行finally语句块
- 执行finally中的语句
- 返回值:1)如果最后一句是return语句,将该return的值返回给调用者;2)如果最后一句不是return语句,以下返回临时存储中的值给调用者:a.try内未发生异常,直接转向finally块;b.try内发生异常,转至catch块,catch内未发生异常;3)如果最后一句不是return语句,以下抛出异常给调用者:a.try中的异常未匹配到catch块;b.catch中再次抛出了异常
二、函数除try-catch-finally块外,还有其他语句
public void tryCatch{
//method statement 1
try {
//try statement 1
//try statement 2
} catch(ArithmeticException ex) {
//catch ArithmeticException statement 1
//catch ArithmeticException statement 2
} catch (Exception ex) {
//catch Exception statement 1
//catch Exception statement 2
} finally {
//finally statement 1
//finally statement 2
}
//method statement 2
}
//finally内无return语句时,不存在“ 一、函数完全由try-catch-finally构成”中的限制
1、try-catch-finally的执行同一,如果在执行过程中能执行到其中一个return语句,就不再执行try-catch-finally后面的语句。举例说明:
- try中包含return,finally中不包含return:先执行try语句,将try中return值放到临时存储中,再执行finally,再返回临时存储中的值给调用者;
- try中抛出了异常,被catch捕获,catch中有return,finally中不包含return:先执行try语句,直至异常处抛出,由catch捕获,然后执行catch语句,将catch中的return值放到临时存储中,再执行finally,再返回临时存储中的值给调用者;
2、try-catch-finally的执行同一,如果在执行过程中未执行到任一return语句,继续执行try-catch-finally后面的语句。举例说明:
- try中不包含return,finally中不包含return:先执行try语句,再执行finally语句,由于没有任何一个块有return,接下来继续执行try-catch-finally后面的语句,直至函数完成。
- try中抛出了异常,被catch捕获,catch中不包含return,finally中不包含return:先执行try语句,直至异常处抛出,由catch捕获,然后执行catch语句,再执行finally,由于没有任何一个块有return,接下来继续执行try-catch-finally后面的语句,直至函数完成。
三、总结
finally有return,finally的return
finally无return,try的return(try中无异常、有return)
catch的return(try中有异常,catch中无异常、有return)
try的异常(try中有异常、未匹配到catch)
catch的异常(try中有异常、匹配到catch,catch中有异常)
try-catch-finally语句块后面的执行结果(未执行到try-catch-finally中的return/异常,程序继续执行完结)