异常分类
异常的捕获和处理
格式是:
try {
编写异常代码;非异常的代码尽量不要放在这里
}catch(OneException e) {
}catch(TwoException e) {
}finally {
}
- try 中包含了可能产生异常的代码
- try 后面是 catch,catch 可以有一个或多个,catch 中是需要捕获的异常
- 当 try 中的代码出现异常时,出现异常下面的代码不会执行,马上会跳转到相应的catch 语句块中,如果没有异常不会跳转到 catch 中
- finally 表示,不管是出现异常,还是没有出现异常,finally 里的代码都执行,finally 和 catch 可以分开使用,但 finally 必须和 try 一块使用,如下格式使用 finally 也是正确的
获取异常对象的信息
- 取得异常描述信息:getMessage()
- 取得异常的堆栈信息(比较适合于程序调试阶段):printStackTrace();
声明异常/异常声明 throws
在方法定义的地方采用throws 声明异常,如果声明的异常为受控异常,那么调用方法必须处理此
异常 (通过try…catch方式来处理),非受控异常的方法,调用时是否进行异常处理并无要求,处理与否都可以。
手动抛异常 throw
在异常方法中通过手动抛异常来抛出方法异常的信息等。
例如:
throw new IllegalArgumentException("除数为 0");
异常捕获顺序
从小到大
自定义异常
自定异常一般是继承于Exception 或 RuntimeException
继承于Exception的是受控异常,调用方法时要进行异常的处理
继承于RuntimeException的异常是非受控异常
自定义异常的步骤
1.编写一个类继承Exception 或 RuntimeException
2.在这个类中编写一个无参构造方法和一个参数为message的有参构造方法,这个有参构造方法要调用super(message)来调用父类的有参构造参数。
3.如果定义的方法是受控异常的,要先声明异常throws,然后手动抛出异常throw,在调用这个方法时,要用try…catch进行异常处理。
4.如果定义的方法是非受控异常,可以不用声明异常,调用方法时也可以不进行异常处理。
注:子类方法不能抛出比父类方法更多的异常,但可以抛出父类方法异常的子异常