Java在异常处理中try、catch、finally的执行顺序

    通过学习Java的异常处理,知道它是通过try-catch-finally来实现的,那么就有一个疑问?他们的执行顺序是如何的,接下来我将通过简单的实例来说明。

 


当无异常时的代码:

	try {
			int c = 10/5; 
			System.out.println("没有异常走try");
		}catch(Exception e) {
			System.out.println("有异常走的catch");
		}finally {
			System.out.println("走的finally的内容");
		}

执行结果:

由上述代码及其执行结果可以看出当10/5正常执行因为没有异常所以走的是try块的内容并没有经过catch,但是其仍然走了finally的内容。


 当有异常时的代码:

	try {
			int c = 10/0; 
			System.out.println("没有异常走try");
		}catch(Exception e) {
			System.out.println("有异常走的catch");
		}finally {
			System.out.println("走的finally的内容");
		}

执行结果:

当我们将分母改为0时它是必然存在异常的,由执行结果可以看出它走了catch的模块,但其仍然经过了finally的内容。

 


总结:

1、首先我们可以看出try、catch、finally的执行顺序,是按顺序执行的,同时不论是否存在异常finally都是要执行的。

2、当try中没有异常时,其执行顺序为try→finally。

3、当try中有异常,其执行顺序为try→catch→finally。


    对知识进一步扩展,当我们添加return时try-catch-finally执行顺序又是如何的呢?接下来仍然用代码和执行结果来说明

当无异常时只存在try-catch的return的代码:

	try{
	
			int c = 10/5; 
			return "没有异常走try";
		}catch(Exception e){
			return "有异常走的catch";

		}

执行结果:

从执行结果可以看出当没有异常,try块中有return关键字时 ,没有finally 则直接返回


当有异常时只存在try-catch的return的代码:

        try{
	
			int c = 10/0; 
			return "没有异常走try";
		}catch(Exception e){
			return "有异常走的catch";

		}

执行结果:

从执行结果可以看出当有异常,返回的时catch块的return


当无异常时存在finally的return的代码:

        try{
	
			int c = 10/5; 
			return "没有异常走try";
		}catch(Exception e){
			return "有异常走的catch";

		}finally{
			return "走的finally的内容";
			
		}

执行结果:

从执行结果可以看出当没有异常,且try和finally中都存在return时返回的是finally的值


当有异常时存在finally的return的代码:

        try{
	
			int c = 10/0; 
			return "没有异常走try";
		}catch(Exception e){
			return "有异常走的catch";

		}finally{
			return "走的finally的内容";
			
		}

执行结果:

从执行结果可以看出当有异常,且catch和finally中都存在return时仍然返回的是finally的值


总结:

1、try块中有return 关键字, catch块也有return 关键字时且没有finally时,如果有异常时则作走catch块的return,如果没有异常则走try里的return。

2、当try块中有return ,carch也有return,且finally中也有return 如果没有异常发生走finally里的return。

3、当try块中有return,catch也有return,且finally也有return,如果有异常 则按照finally中的返回结果执行。

注意:

1、finally中的代码总会被执行。

2、当finally里存在return时不管是否出现异常都会走finally的异常,这样会破坏程序的完整性,而且一旦finally里出现异常,会导致catch中的异常被覆盖。所以虽然finally可以通过编译与执行,但是在finally书写return是不推荐的。

 

 

 

 

  • 19
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值