写的代码不可能十全十美,有的是会报错,一报错程序立马挂了
异常机制:程序中出现了异常,那系统可以将异常捕获并把处理掉,这样程序就不会挂掉,依然往后执行
异常分类
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  | 
