异常 Exception 分为运行时异常和编译时异常。


当一个方法中有一条语句出现了异常,它就会throws(抛出)一个异常,然后后面的语句不会执行返回上一级方法,其上一级方法接受到了异常之后,有可能对这个异常进行处理,也可能将这个异常转到它的上一级。对于接收到的异常有两种处理方式:throwstry方法。


1)、对于throws格式

对于方法a,如果它定义了throws Exception。那么当它调用的方法b返回异常对象时,方法a并不处理,而将这个异常对象向上一级返回,如果所有的方法均不进行处理,返回到主方法,程序中止。(要避免所有的方法都返回的使用方法,因为这样出现一个很小的异常就会令程序中止)。


如果在方法的程序中有一行throw new Exception(),返回错误,那么其后的程序不执行。因为错误返回后,后面的程序肯定没有机会执行,那么JAVA认为以后的程序没有存在的必要。


2)、对于try……catch格式:

try{// 出现1

// 可能出现异常的代码

}catch(异常对象){// 出现0-N多次的时候小的写上面,大的写下面,异常时从上到下逐步的捕获的。

      //捕获到对应异常对象之后所做的处理。

}finally{// 出现0-1次,没有catchfinally一定要有。

      //一定会执行的代码

}



用这种方法,如果代码正确,那么程序不经过catch语句直接向下运行;

如果代码不正确,则将返回的异常对象和e进行匹配,如果匹配成功,则处理其后面的异常处理代码。(如果用exception来声明e的话,因为exception为所有exception对象的父类,所有肯定匹配成功)。处理完代码后这个例外就完全处理完毕,程序会接着从出现异常的地方向下执行。最后程序正常退出。


Try中如果发现错误,即跳出try去匹配catch,那么try后面的语句就不会被执行。

一个try可以跟进多个catch语句,用于处理不同情况。当一个try只能匹配一个catch

我们可以写多个catch语句,但是不能将父类型的exception的位置写在子类型的excepiton之前,因为这样父类型肯定先于子类型被匹配,否则JAVA编译出错。


trycatch后还可以再跟一子句finally。其中的代码语句无论如何都会被执行(因为finally子句的这个特性,所以一般将释放资源,关闭连接的语句写在里面)。

注意:

如果在程序中书写了(抛出)exception但是没有对这个可能出现的检查结果进行处理,那么程序就会报错。

而如果只有处理情况(try)而没有相应的catch子句,则编译还是通不过。


对于编译时异常:

一般都是try-catch-finally处理掉。方法中可以不处理,用throws上抛,最终抛到了mainmain方法中禁止用throws上抛异常。意味着main一定要处理。

对于运行时异常:可以用try-catch-finally处理,但是对效率和代码阅读都有影响,所有一般都是用if条件来使程序健壮。