异常处理笔记——异常的执行顺序

//题目要求:要求必须输出“计算开始”,“计算有错",如果出现异常则交给调用处执行,必须有NumberFormatException异常,ArithmeticException异常
代码:

package 第七章.课后作业.one;

class Math{
	public int math(String a,String b) throws NumberFormatException,ArithmeticException{
		System.out.println("-----计算开始-----");
		int temp=0,x,y;
		x=Integer.parseInt(a);                       //拆箱
		y=Integer.parseInt(b);                      //如果这里出现了异常,因为方法调用的原因他直接会
		try {
			temp=x/y;                                //此代码不再执行
		} catch (Exception e) {                      //此代码不再执行
			System.out.println("抛出一个异常");              //此代码不再执行
		}
		finally {                                    //此代码不再执行
			System.out.println("-----计算有错----"); //此代码不再执行
		}
		System.out.println("还在执行");              //此代码不再执行
		return temp;                                 //此代码不再执行
	}
}
public class ThrowDemo {
	public static void main(String[] args) {
		Math m=new Math();
		try {
			System.out.println("计算结果="+m.math("a", "0"));
		} catch (NumberFormatException e) {
			System.out.println("数字转换有异常----"+e);
		}catch (ArithmeticException e) {
			System.out.println("算法有异常1----"+e);
		}
		System.out.println("结束了");
	}

}

1.在我开始的时候,我给math赋的值是math(a,0)想到他应该会抛出两个错误,可是后来他只抛出了一个NumberFormatException(数字转换异常),然后我就明白了,在调用math()方法时,根据顺序,如果拆箱出了错误,他就会被catch捕获,执行调用方法下面的代码,而不会继续执行math()中的语句。
在这里插入图片描述
这是math(1,0)的结果,按照执行顺序,应该还是会在调用处抛出0的异常,但是ArithmeticException(算法异常)已经被抛出了,所以不再执行。如果把math()中的删除,可以发现,他就会在调用处,又抛出异常了。

在这里插入图片描述
删除math()中的catch后的结果
在这里插入图片描述
2.当catch捕获了一个异常之后,后面的catch,他将不会再执行。这也是为什么Exception会放在最后的原因。捕获范围打的要放在捕获范围小的后面。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值