异常
一.何谓异常
程序运行时可能会出现地一些错误,例如试图打开一个根本不存在地文件,异常处理将会改变程序的流程控制过程,让程序对错误进行处理。
在这里,我们引入Throwable这个java系统自带的类,它由两个重要的子类。分别时Exception(异常)和Errow(错误),其区别为:前者能被系统处理,而后者不行。
二.try-catch语句
try语句的具体内容为可能发生异常的语句,一旦try部分抛出异常对象,或调用含有异常对象的方法时,try部分会立刻结束执行,跳转到对应的catch语句,对于catch语句来说,各个
参数都为Exception的某个子类,且各个catch语句的父类不能相同
三.自定义异常(以下为五星级重点内容)※※※※※
try-catch语句中try的语句中是用来判断是否有由异常类所创建对象的抛出,一旦有,那么catch语句中的参数类型为某个异常类,于是就会进行catch语句体内的内容。
但是什么叫抛出异常类所创建的对象呢
你看哈
就是用throws和throw这两个关键字
throws
throws关键字是在声明方法时使用,例如:void speakLoudly (int a)throws Exception {} 其中Exception是java自带的异常类,是我们所有异常的父类,当我们调用speakLoudly中的方法时
因为我们使用了throws关键字,系统会自动判断我们的操作是否发生了异常,也就是说它是自动的(当try的语句体内有speakLoudly的方法时,如果有异常,会自动抛出Exception的对象,也就是
异常类的对象)。
需要注意的时,抛出异常对象和catch语句是紧密相关的,不要分开来理解,正是由于try语句需要得到一个异常对象,而throw和throws会抛出一个异常对象,我们才可能有catch语句中所对于的处理方法。
throw
好了,在理解了这个关键点之后,我们又有了一个问题,如果我们想要自己抛出一个对象呢(也就是说自己控制,在什么状况下抛出一个异常对象),我们就要使用throw关键字了,它使用在
speakLoudly这个方法体内也就是{}之中,由于我们是要自己抛出异常对象,所以我们throw后是一个使用new关键字所创建后的实例对象,而不能是一个抽象的异常类。
例如: void speakLoudly (int a)throws Exception {
if(a>0){
throw new Exception(); //不能是Exception,这里我们需要的是一个由异常类所创建的对象,而不是一个类
}
并且,throw不能单独使用,必须与throws与try,catch语句同时使用
至此,我们对throws,throw,以及try和catch语句已经理解的比较透彻了,但还有需要注意的一点,如果要自己新创建一个异常类,我们必须把这个异常类作为Exception的子类