关于异常的理解

不出意外,我们的课堂和实验总是会告诉我们一些比较实用的知识,然后我还总是听的不太明白,没有办法只能自己找一找之后写一篇博客记录一下了。。。

这次的实验要用到异常处理,既然要处理异常1我们首先就要知道什么是异常,异常的分类是什么样的我们首先看一张图:

关于异常的理解

这张图简洁明了的告诉了我们有一场的分类

首先是最外层Throwable它是所有异常和错误的祖先。代表的是所有可以通过java异常传播机制来传播的问题的共性

之后是Error类这个类我们不是很常见他与我们平时写代码写出来的bug不一样,它是代表了一些程序无法处理的错误,并且这些错误大多数与我们编写的程序无关,经常是JVM出错了可能会抛出这个类。

Expection类代表程序能够处理的异常,但是我们的重点不在他而在于它的两个子类

我们最常见也是最烦的一个子类就是RuntimeExpection也就是运行时异常,里面有我们常见的NullPointerException和ArrayIndexOutOfBoundsException。一般情况下RuntimeExpection在我们编译的时候不会被检查出来,因为不知道什么时候会发生,无法预计。但是在程序运行的时候RuntimeExpection就会被暴露出来并且中断程序。这时候我们已经无法处理这个RuntimeExpection了,只能够将程序关闭开始从代码排错了。所以我们将RuntimeExpection和Error统称为uncheck异常

关于异常的理解关于异常的理解

有了uncheck异常与之相对的自然也就有check异常,除了RuntimeException及其子类以外,其他的Exception类及其子类都属于check异常。check异常虽然是异常状况,但在一定程度上它的发生是可以预计的,而且一旦发生这种异常状况,就必须采取某种方式进行处理。例如我们使用流的时候,编译器要求我们加上try catch处理语句或者向上throws这个异常,要不他就给我们报错。

关于异常的理解

说完了异常的分类我们来说一说异常地处理,向上一张图讲的,异常处理的方式主要有两种一种是try catch finally语句还有一种是throws向上抛出异常。

1.try catch finally

关于异常的理解

try里面装的是可能会抛出异常的语句

catch的参数是会捕获的异常类型,里面装的是捕获到异常的处理方式,注意一个try可以有多个不同的catch,以便于捕捉try里面抛出的不同的异常,但是越是具体的类型越是要放在上面,因为程序只会执行第一个匹配异常成功的catch语句中的代码。要是把Expection放在最上面,不管抛出什么都会执行Expection。

2.throws

关于异常的理解我们看到使用throws可以向上抛出异常,抛出多个用,分隔

像这样我们的代码中可能会出现异常但是我们不能或者说是不想处理怎么办呢,使用throws将这个异常抛出,由调用他的代码处理,如果调用它的代码还是无法处理怎么办呢?继续向上抛出直到能够找到处理它的代码位置。

那我们又想了,java给的这些异常类型都无法满足我的需求这可咋整啊,没问题,我们还可以自己构造一场,方法很简单自己写个类继承Expection方法就可以了,在遇到会抛出这种异常的代码的时候使用throw主动抛出就ok了,之后再有调用它的代码进行捕获解决或者继续向上抛出。。

关于异常的理解关于异常的理解

关于异常的理解

用起来十分方便,我这是懒版的只有一种异常区别就是自己手动输入字符串的不同,要是勤快的可以直接在构造函数中就将字符串加入函数中,之后再根据不同的情况抛出不同的异常就行了