异常:程序在运行时出现的不正常情况,是对不正常情况的一种描述,并将其封装成对象。
1.异常体系Throwable
异常都有共性内容比如:每一个问题都有名称、描述的信息、出现的位置,所以可以不断的向上抽取,形成了异常体系。 这个体系中的所有类和对象都具备一个独有的特点,就是可抛性。可抛性的体现:就是这个体系中的类和对象 都可以被throws和throw两个关键字所操作。
throw和throws关键字的区别:
throw:用于抛出异常对象,用在方法内,后面跟异常对象,只能抛一个。
throws:用于抛出异常类,用在方法上(参数列表括号右边),后面跟异常类名,可以抛多个,用逗号隔开。
Error(错误):由JVM抛出的严重性问题,不编写针对性代码对其处理,直接修改程序。
Exception(异常):可通过try{}catch(Exception e){}finally进行处理
体系特点:Exception和Error的子类名都是以父类名作为后缀,阅读性很强。
异常分两种:1.编译时异常,只要是Exception及其子类都是编译时被检测的异常。
2.运行时异常,其中Exception有一个特殊的子类RuntimeException以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。
异常处理两种方式:1.捕获异常:try catch 直接处理可能出现的异常。
2.抛出异常:throws声明告诉调用者可能的异常,暴露问题,让调用者自己处理。
异常处理格式:
try {
//需要被检测异常的代码
} catch(异常类 对象){
//处理异常的代码
} finally {//通常用于关闭(释放)资源
//一定会执行的代码,catch块使用System.exit(0);除外
}
异常处理原则:1.方法内容如果抛出需要检测的异常,那么方法上必须要声明,否则必须在方法内用try catch捕捉,否则编译失败。
2.功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。
3.try对应多个catch时,如果有父类的异常catch语句块,父类异常一定要放在子类异常的下面。
2.自定义异常
当开发时中出现了java中没有定义过的问题时,这时就需要我们按照java异常建立思想,将项目的中的特有问题也进行对象的封装。这个异常,称为自定义异常。
自定义异常的步骤:
1.定义一个子类继承Exception或RuntimeException,让该类具备可抛性
2.通过throw 或者throws进行操作
异常在子父类进行覆盖的体现:
1.子类在覆盖父类时,如果父类的方法抛出了异常,那么子类的方法要么不抛出异常,要么抛出父类异常或者该异常的子类,不能抛出其他异常。
2.如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。3.当try语句块出现异常,程序会自动跳到catch语句块去找匹配的异常类型,并执行异常处理语句,finally语句块是异常的统一出口。