【Java基础】try-catch-finally执行流程

一、函数完全由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/异常,程序继续执行完结)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值