异常处理流程

异常处理流程

在进行异常处理的时候如果将所有已经明确知道要产生的异常进行了捕获,虽然你可以得到非常良好的代码结构,但是这种代码编写是非常麻烦的,所以现在要想进行合理异常就必须清楚在异常产生之后程序到底做了哪些处理。
在这里插入图片描述

  1. 在程序运行的过程之中才会产生异常,而 一旦程序执行中产生了异常之后将自动进行指定类型的异常类对象实例化处理。
  2. 如果此时程序之中没有提供异常处理的支持,则会采用JVM的默认异常处理方式,首先进行异常信息的打印,而后直接退出当前程序。
  3. 此时程序中如果存在异常处理,那么这个产生的异常类的实例化对象将会被try语句所捕获。
  4. try捕获到异常之后与后与其匹配的catch中的异常类型进行依次的比对,如果此时catch中的捕获异常类型相同,则认为应该使用此catch进行异常处理,如果不匹配则继续匹配后续catch类型,如果没有任何的catch匹配成功,那么就表示该异常无法进行处理。
  5. 不管异常是否处理,最终都要执行finally类的语句,但是当执行完成finally的程序之后会进一步判断当前的异常是否已经处理过了,如果处理过了则继续向后执行,如果没有处理则交给JVM进行默认的处理。

通过分析可以发现在整个的异常处理流程之中实际上操作的还是一个异常类的实例化对象,那么这个异常类的实例化对象类型就成为了理解异常处理核心关键所在,在这之前接触过两种异常:

ArithmeticException
 java.lang.Object
    java.lang.Throwable
        java.lang.Exception
            java.lang.RuntimeException
                java.lang.IndexOutOfBoundsException
                    java.lang.ArrayIndexOutOfBoundsException 


ArrayIndexOutOfBoundsException
     java.lang.Object
   		 java.lang.Throwable
        	java.lang.Exception
           	 java.lang.RuntimeException
                java.lang.IndexOutOfBoundsException
                    java.lang.ArrayIndexOutOfBoundsException 

可以发现在程序之中可以处理的异常的最大类型就是Throwable,可以观察到它有两个子类:

  • Error:此时程序还未执行出现的错误,开发者无法处理。
  • Exception:程序中出现的异常,开发者可以处理,真正在开发之中需要关注的是Exception。

通过分析可以发现异常产生的时候会产生异常的实例化对象,那么按照对象的引用原则,可以自动向父类转型,那么如果按照这样的逻辑,实际上所有的异常都可以使用Exception来处理。

范例:简化异常处理

class  JavaDemo
{
	public static void main(String[] args) 
	{
		System.out.println("【1】程序开始执行");
		try{
			int x = Integer.parseInt(args[0]);
			int y = Integer.parseInt(args[1]);
			System.out.println("【2】数值计算:"+x/y);
		}catch(Exception e){
			e.printStackTrace();//处理异常
		}
		finally{
			System.out.println("不管是否出现异常我都会执行");
		}
		
		System.out.println("【3】程序执行完毕");
	}
}
 

当不确定可能产生哪些异常的时候,这种处理方式是最方便的。但是如果这样处理也会产生一个问题,这种异常的处理形式虽然方便,但是描述的错误信息不明确,所以分开处理异常是一种更加明确的处理方式。
在进行多个异常同时处理的时候要把捕获范围大的异常放在捕获范围小的异常下面。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值