在写Java程序的过程当中。我们不可避免的会出现各种各样的问题。比如人开车去某一个地方的时候,中途可能出现发动机坏了,在路上有一个大石头挡住了道路等都是有可能出现。
上面例子所说的车的发动机出现了问题,就是Error问题,当然在java程序中出项这样的问题,我们只能重启程序。而我现在要说的是另一类,就是Exception,亦即异常。在Exception中,分为两类,一种是Checked Exception,(check加一个ed表示过去式,即检查过的,就是我们所说的编译时异常。)还有一类是UnChecked Exception,相应的就是编译的时候不发现异常,而是在运行的时候发现异常,即运行时异常。下面分别举两个例子说明上述的两种异常。
首先说一下运行时异常。
int i=1/0;
显然在在编译的时候并不会报错,但是在运行的时候我们知道会抛出by zero的错误。
而编译时异常的时候,比如下面这句代码:
明显编译的时候就不能通过,我们可以通过try,catch的方法处理:
当然,这里说到了try,catch,我们想想,如果程序可能出现异常,那么我们应该让程序如何处理了?
一种方法是使用try,catch以及finally进行捕捉,手动的进行处理,
另一种就是通过Throw语句扔给上一层,出现问题我不管,我只管向上面抛就是了,当然最后还是要处理的,比如我们在某一个方法出现异常的时候向上抛,一直向上面抛,直到抛给main方法,好,main方法也说,我不管,我也要向上抛,这里可以看到的是好像并没有处理,其实main方法向上抛给了jre,jre处理了。
第一种方法:使用try,catch以及finally进行捕捉的时候,我们看看程序执行的顺序。
在try语句中,写上可能出现异常的语句,这里应该注意的是,写在try中的语句并不是一定会发生错误的,只是有可能会出现错误,
如果没有出现异常,则会执行完try中的语句后跳过catch直接执行finally中的语句。
如果比如语句二出现异常,则会执行catch中的语句,然后执行finally中的,
可以看出无论程序有没有异常,都会执行finallly语句中的,这时候,我们既可以把一些比如关文件流的语句写在finally语句中,因为无论你程序出没出现异常,最后都要关闭文件流。