1、异常是什么?
用面向对象的思想将问题进行描述,并将问题进行对象的封装。
2、异常体系
Throwable
|--Error:不需要编写针对性处理方式
|--Exception:需要编写针对性处理方式进行处理
3、throw和throws的区别:
throw:定义在函数内,抛出一个异常对象。(throw抛异常对象的时候,其下面最好不要放其他语句,因 为一旦执行throw语句,下面就不执行了)
throws:定义在函数上,抛出异常类,可以抛出多个用逗号隔开。
4、Exception的分类有两种:
编译时异常:编译时被检测
①该异常在编译时,如果没有处理(没有抛也没有try),编译失败
②该异常被标识,代表这个异常可以被处理
运行时异常:RunntimeException
在编译时,不需要处理,编译器不检查。该异常的发生,建议不处理,让程序停止,需 要对代码进行修正。
如果在函数内抛出RunntimeException,函数可以不用声明,编译一样通过。如果在函数 上声明了该异常,调用者可以不用进行处理,编译一样通过,之所以不用在函数上声明, 是因为不需要让调用者处理。
5、异常的处理语句:
注意:①finally语句中通常定义的是关闭资源代码,因为资源必须释放。finally语句只有在执行到System.exit(0)时不会执行。
②catch是用于处理异常,如果没有catch就代表异常没有被处理过,如果该异常是检测时异常,那么必须声明。
③一个try后面可以跟多个catch块,不管后面跟多少catch块,最多只能执行一个catch块
6、异常的处理方式:
① 使用try...catch...finally进行捕获
② 在产生异常的方法声明后面throws某一个Exception类型,将异常抛到外面一层去
6、异常处理的原则:
①声明异常时,建议声明更为具体的异常,这样处理的可以更具体
②对方声明几个异常,就对应有几个catch块,不要定义多余的catch块。如果出现多个catch块中的异常 出现继承关系,父类异常catch块放在最下面,这样保证后续的catch块可能被执行。否则子类型的 catch块永远无法到达。如果异常是独立的,它们的先后顺序是没有要求的。
7、异常在子父类中的体现:
①子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类
②如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集
③如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法中发生了异常,就必须进行try处理,绝对不能抛。
8、自定义异常:定义类继承Exception或者实现Runnable接口
为什么要继承Exception或者实现Runnable接口?
①为了让该自定义类具备可抛性。只有这个体系中的类和对象可以被throw和throws操作
②为了让该类具备操作异常的共性方法
自定义异常必须手动抛出异常对象,而java中的异常可以自动抛出也可以手动抛出。