欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第27章:异常的捕获及处理:课时119:异常处理流程

程序员文章站 2024-02-20 16:43:46
...

在进行异常处理的时候如果将所有可能已经明确知道要产生的异常都进行了捕获,虽然你可以得到非常良好的代码结构,但是这种代码编写是非常麻烦的,所以现在要想进行合理异常就必须清楚在异常产生之后程序到底做了哪些处理。
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第27章:异常的捕获及处理:课时119:异常处理流程

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.ArithmeticException

ArrayIndexOutOfBoundsException:
java.lang.Object
	|-java.lang.Throwable
		|-java.lang.Exception
			|-java.lang.RuntimeException
				|-java.lang.IndexOutOfBoundsException
					|-java.lang.ArrayIndexOutOfBoundsException

可以发现在程序之中可以处理的异常的最大的类型就是Throwable,而打开Throwable可以观察在此类中提供有两个子类:
1.Error:此时程序还未执行出现的错误,开发都无法处理;
2.Exception:程序中出现的异常,开发者可以处理,真正在开发之中所需要关注的就是Exception;
通过分析可以发现异常产生的时候会产生异常的实例化对象,那么按照对象的引用原则,可以自动向父类转型,那么按照这样的逻辑,实际上所有的异常都可以使用Exception来处理。
范例:简化异常处理

public 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("[F]不管是否出现异常,我都会执行。") ;
		}
		System.out.println("[3]****** 程序执行完毕 ******");
	}
}

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