异常:就是程序在运行的时候出现的不正常的情况

对于严重的问题,通过Error类进行描述

         对于Error一般不编写针对性的代码去进行处理

对于非严重问题,通过Exception类进行描述

         对于Exception可以通过针对性的代码去进行处理

 

异常的处理:

try{
         需要被检测 的语句
}catch(异常的类变量){
 
         处理异常的代码(处理方式)
 
}finally{

          一定会执行的代码}



用throws抛出异常  抛出多个异常时中间用逗号隔开

对多异常的处理:

1.       声明异常时,建议声明更为具体的异常,这样调用者可以处理的更具体

2.       对方声明了几个异常就应该对应有几个catch块,不要对应多余的catch块。

         如果多个catch块中的异常出现了继承关系父类的异常catch块要放在最下面。



自定义异常

必须自定义的类继承exception

继承的原因:异常体系有自己的特点,异常类和异常对象都需要被抛出,可抛性是throwable这个体系的独有的特点,只有这个体系中的类和对象才能被throw和throws操作。


throw和throws的区别:

         throw使用在函数内的,throws是用在函数上的。

         throw后面抛出的是异常对象,throws抛出的是异常类(可以有多个,用逗号隔开)

 

 

 

Exception中有一个特殊的子类,RuntimeException运行时异常,如果在函数内抛出了该异常,在函数上可以不用声明,编译一样通过,如果在函数上抛出该异常,调用者可以不用进行处理,编译一样通过

 

 

 

 

异常分为两种:

         编译时被检测异常:如果在函数中抛出,就必须在函数上进行声明。并且调用者必须做相应的处理,否则编译失败。

         编译时不被检测异常:运行时异常(运行时异常及其子类)

 

异常在继承体系的体现:

1.      子类继承父类,在覆盖父类的方法时,只能抛出父类的异常或者父类异常的子类或者不抛出任何异常

2.      如果父类抛出了多个异常,那么子类在覆盖方法的时候,只能抛出父类异常的子集,或者其中的子类

3.      如果父类或者接口的方法中没有抛出异常,那么子类在覆盖方法的时候,也不可以抛出异常,如果子类的方法中发生了异常,那么必须要进行try-catch处理,绝对不能不抛出。

 

 

 

异常总结

异常:是对问题的描述,将问题进行封装

异常体系:

throwable

         ----Error

         ----Exception

异常体系的特点:

         异常体系中所有的类以及建立的对象都具有可抛性,可以被throw或者throws操作

         只有异常体系具有这个特点

throw 和throws的用法:

         throw定义在函数中,抛出的是异常对象

         throws定义在函数上,抛出的是异常类

 

异常分为两种:

         编译时异常:该异常在编译时,如果没有被处理,编译失败

                                               该异常被声明,代表着可以被处理

         运行时异常:在编译时,不需要处理,编译器不会检查,建议该异常发生时不处理,让                                     程序停止,修正代码

异常处理语句:

try{}catch{}finally{}

三种结合方式

try{}catch{}finally{}

try{}catch{}

try{}finally{}

注意:finally中通常定义的是关闭资源的代码

只有一种情况finally不会执行,就是在上面出现了System.exit(0);语句

JVM退出,程序不会继承执行

 

 

 

 

自定义异常:定义类继承Exception或者其子类

1.      为了让该定义的类具有可抛性

2.      让该类具备操作异常的共性方法

当自定义异常时,可以使用父类已经定义好的功能,将异常信息通过构造方法传递

异常的好处:

1.  将问题进行了封装

2.  将正常代码与处理问题代码进行分离

异常的处理原则:

1.      处理方式有两种:try或者throws

2.      调用到抛出异常的功能的时候,抛出几个异常就要处理几个异常,一个try对应多个catch

3.      如果有多个catch,父类的catch要放在最下面

4.      catch中要定义具体的针对性的处理方式,不要简单的定义输出语句,也不要不写

 

当捕捉到的异常,本功能处理不了的时候,可以继续在catch中抛出新的异常。

try{}catch(Exception e){ throw new BException() }

 

如果该功能处理不了,但并不是该功能出现的异常,可以将异常进行转换后再抛出与它功能相关的异常,或者异常可以处理,但是需要将异常产生的和本功能相关的问题提供出去,让调用者知道,并处理

 

异常的注意事项:

1.      在子父类覆盖时,子类抛出的异常必须是父类异常或者父类异常的子类或者子集

2.      如果父类或者接口没有抛出异常,子类出现异常,只能try catch处理。