java异常处理机制


        大二下学期开了java课,在这一节上有点小感想在这里发表一下。

        异常处理评判一个程序好坏的标准之一,一个程序由于用户的操作的不可控性、程序的不可预知性,可能产生一些可预知的错误,这些错误就统称为异常。异常在编程中是不可避免的,好的异常处理机制可以使程序变得友好而强壮。所以我们应该对设置异常处理的位置,以及异常处理的原理有透彻的理解。

        在老师讲到这一块时说道:无论如何finally语句块里的程序无论如何都会被执行,这时候我就觉得老师这么绝对的说这句话是不是太草率了。i想到了自己看到的一题面试题,就问了一下老师,没想到老师也不是太清楚,最后自己通过Debug求证得到了答案。

        这个题目问的是:在try语句块里有return语句,当程序运行到return语句时。程序是否直接return出了函数?还执行finally语句里的代码么?如果执行是在return之前还只在return之后?

        测试用代码:

public static int iji(){
		try{
			System.out.print("Hello try\n");
			return 111;
		}
		finally{
			System.out.print("1\n");
			System.out.print("finally\n");
		}
	}
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		int aaaa = 1111;
		aaaa++;
		System.out.print(iji());
	}

运行结果是:

Hello try
1
finally
111

从结果可以看出,程序在执行了打印Hello try 语句之后,又打印了1 和 finally 说明在返回之前就执行了finally语句块内的代码。

之后用Debug跟踪,可以看出在程序执行了打印Hello try之后没有到达return语句而直接跳转到了finally语句块内,这说明程序是先执行了finally内的语句然后才反回值的。

(这时候才发现老师说的也有道理~)

希望对大家有帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值