finally在return之前执行

本文通过一个具体的Java程序实例,详细解析了在Java中catch子句中的return语句与finally子句的执行顺序及其背后的原理。揭示了return语句如何与finally子句交互,并展示了实际运行结果。

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

 

今年上自习看<<深入java虚拟机>>,有提到虚拟机里有种基本类型:returnAddress,用于实现finally子句.

由此想起以前有看过finally与return执行先后次序的讨论.

小编程序试试...加深印象.

 

 

/*
@author: jarg
http://jarg.iteye.com/
*/
public class Test
{
	public static void main(String[] args)
	{
		System.out.println(test());
	}

	public static String test()
	{
		try
		{
			int i = 2/0;
			System.out.println("error1.");
			return "1";
		}
		catch (Exception e)
		{
			System.out.println("error2.");
			return getValue();
		}
		finally
		{
			System.out.println("error3.");
		}
		//System.out.println("error4.");
	}

	public static String getValue()
	{
		System.out.println("getValue()");
		return "2";
	}
}

 

 

 

结果输出:

 

 

error2.

getValue()

error3.

2

 

解释:

 

 

catch子句中的return子句,会先计算并处理返回值,再判断是否有finally子句.

有则执行finally子句再执行方法返回的操作;否则直接方法返回.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值