论try、catch、finally返回值的执行顺序

本文深入解析Java中的异常处理机制,重点介绍了try、catch和finally语句的执行流程及返回值特性,通过具体代码示例说明了不同场景下异常处理的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上代码

public class TryTest {
	public static void main(String... args) {
		System.out.println(m1());
	}
	
	static int m1() {
		int x;
		try {
			x = 1;
			return x;
		} catch (Exception e) {
			x = 2;
			return x;
		} finally {
			x = 3;
		}
	}
}

结果

因为在执行try语句块时return已经把x的值1读入到了栈顶,在finally语句块中再把x的值赋值3,语句执行完毕,返回栈顶的值‘1’;

如果在finally语句块中加入 return x;

public class TryTest {
	public static void main(String... args) {
		System.out.println(m1());
	}
	
	static int m1() {
		int x;
		try {
			x = 1;
			return x;
		} catch (Exception e) {
			x = 2;
			return x;
		} finally {
			x = 3;
			return x;
		}
	}
}

 结果

无论变量结果是啥,最后返回的是栈顶的值;

结论

1. 如果try语句块中出现Exception的异常或其子类异常,则转到catch语句块处理。

2. 如果try语句块中不出现Exception的异常或其子类异常,则转到finally语句块处理。

3. 如果catch语句块出现异常,则转到finally语句块。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值