写的代码不可能十全十美,有的是会报错,一报错程序立马挂了
异常机制:程序中出现了异常,那系统可以将异常捕获并把处理掉,这样程序就不会挂掉,依然往后执行
异常分类
Throwable
Error
Exception
- 编译时异常(检查性异常):需要强制性try catch
- IOException
- ……
- 运行时异常(非检查性异常):一般不做处理
- NullPointerException
- ArithmeticException
- ……
- 编译时异常(检查性异常):需要强制性try catch
处理
try…catch…finally
1 | "一个抛,一个接" |
获取异常信息的方式:
- getMessage(): 获取抛出的异常信息
- e.printStackTrace(); 在控制台打印出异常的详细信息
catch
catch里面的异常类型要和抛出的异常类型一致
多个catch时,里面的异常类型没有父子关系时,顺序没有要求
但是存在父子关系时,父类异常只能放在子类异常下面
finally
里面的代码不管是否发生异常都会执行
里面的代码会在return之前执行
主要用来干什么?
关闭流 连接 回收资源等。
throws
在发生位置不处理抛出,交给方法的调用者去处理。
- 方法内部异常若不能立马处理的,可以通过throws抛出
- throws:可以在方法声明处定义此方法向外抛出的异常,这样就会将异常交给方法的调用者进行处理
- 一个方法可以抛出多个异常
- 继承时方法的重写问题
- 子类重写父类方法时,抛出异常不能大于父类方法抛出的异常
- 若父类方法为抛出异常,子类重写时也不能抛出异常
throw
throw:手动抛出异常
1 | // 手动抛异常,注意:抛的是异常对象 |
自定义异常
1 | // 自定义异常继承RuntimeException |