异常机制
异常的基本概念
- 异常是指在java程序运行过程中出现的不正常情况
- java.lang.Throwable类是Java语言中错误(Error)和异常(Exception)的超类
- 其中Error类主要用于描述java虚拟机无法解决的问题,例如jvm挂了
- 其中Exception类主要用于描述因编码过程中出现的错误或外在因素导致的轻微错误,例如:0作为除数等
异常的分类
- java.lang.Excetion是所有异常的超类通常按以下两种进行划分:
RuntimeException - 运行时异常 ,非检测性异常 IOException和其他异常 - 其他异常,检测性异常
- Runtime的主要子类包括
ArithmeticException类 - 算数异常 ArrayIndexOutOfBoundsException类 - 数组下标越界异常 NullPointerException - 空指针异常 ClassCastException - 类型转换异常 NumberFormatException - 数字格式异常
- 注: 当程序运行过程中没有处理异常,则jvm擦用默认方式处理异常,即:打印异常名称,异常发生的原因,异常发生的位置同时终止当前程序运行。
异常的避免常用方式
- 尽量多使用if条件过滤掉可能出现问题的条件
- 合理的使用if判断,否则代码会变得可读性差,臃肿
异常的捕获
//异常捕获语法格式
try{
编写可能发生异常的代码;
}
cache(异常类型 引用变量名){
编写针对该类异常的处理代码;
}
...
finally{
编写无论是否发生异常都要执行的代码;
}
注意事项一
- 当编写多个catch分支是,切记小类型应该放在大类型的前面;
- 懒人的写法cache(Exception e)
- finally中的代码无论是否发生异常都会运行
注意事项二 try catch final执行顺序 try { a; b; - 可能发生异常的语句 c; }catch(Exception ex) { d; }fifinally { e; } 当没有发生异常时的执行流程:a b c e; 当发生异常时的执行流程:a b d e;
注 : 关于try catch finall的执行情况参考https://blog.csdn.net/mxd446814583/article/details/80355572
异常的抛出
基本概念
在某些特殊情况下有些异常不能处理或者不便于处理时,就可以将该异常转移给该方法的调用者,
这种方法就叫异常的抛出。当方法执行时出现异常,则底层生成一个异常类对象抛出,此时异常代
码后续的代码就不再执行。
语法格式
访问权限 返回值类型 方法名称(形参列表) throws 异常类型1,异常类型2,…{ 方法体; }
如:
public void show() throws IOException{}
方法重写的原则
a.要求方法名相同、参数列表相同以及返回值类型相同,从jdk1.5开始支持返回子类类型;
b.要求方法的访问权限不能变小,可以相同或者变大;
c.要求方法不能抛出更大的异常;
注意:
子类重写的方法不能抛出更大的异常、不能抛出平级不一样的异常,但可以抛出一样的异常、更小
的异常以及不抛出异常。
经验分享
若父类中被重写的方法没有抛出异常时,则子类中重写的方法只能进行异常的捕获处理。
若一个方法内部又以递进方式分别调用了好几个其它方法,则建议这些方法内可以使用抛出
的方法处理到最后一层进行捕获方式处理。