异常处理概述:
异常:
这个最让“程序员”头疼的词语;这要花我们80%的时间去处理它;所以这一章也是十分重要的。
我们必须要让我们编译的程序具有良好的“健壮性”,能良好的“运行”
1.error :1.硬件问题 2. 运行环境问题(用代码不能解决的问题)。
2.Exception :1.用代码能理解 :i:编译时异常(checked) ii:运行时异常(uncheced)
异常的控制流程:
1.异常处理机制:依次将异常传给方法调用者(若方法调用者不处理就一直传给上一次的调用者,最后到main函数-->最后传给虚拟机)
ii.异常处理的两个方法 getMassage(),printStackTtace();
2.异常的捕获机制
try{
正常逻辑必须执行,但可能发生异常
}catch(异常名称 e){
捕获块
}
catch可以有多个,捕获多种异常;为了避免无法考虑到的异常;通常会在最后加上:
catch(Exception e){
} 即:所有异常一起捕获
Thowable类:
是error和Exception的父类
Thowable 不是接口
异常的处理和声明的规则 :
完整的异常块:
try - catch - finally finally中的语句无论是否发生异常都会执行 常用于:(i:资源清理 ii:管道的关闭 iii:回收) 唯有system.exit(0)可以阻止(关闭JVM)
finally只能放在最后 try - catch ; try - finally
声明异常 :
thows 声明异常放在方法名的后面,可以更多个异常类,警告方法调用者在编译期,该方法有可能发生异常,要求处理。
thow 指抛出异常,放在方法体中用于抛出异常对象
完整的方法声明:
访问修饰符 可选修饰符 返回类型 方法名(形参列表)thows(异常类列表)
用户自定义异常:
一个完整的自定义异常要满足:
1.必须继承Exception
2.至少重载三个构造方法
方法重写中:
1.子类 重写抛出的异常不能比父类多(指的不是个数,而是范围大小)
2.子类抛出的异常不能与父类无关,要么一样,要么在父类的范围中
日志打印:
异常打印:
e.toString():打印异常的类型,例如:NullPointException ,ClassNotFoundException,OutOfBoundException...
e.getMessage():打印错误的原因 ,如空指针错误就打印null,如是计算除数为0 即 int a = 20/0 ,就打印/by zero
e.printStackTrace(): 打印错误的原因,还打印错误的位置
备注:
有一次开发环境代码和测试环境代码一样,但是测试环境报错了,全局异常里面error就是用的e.getMessage() ,后面居然是打印的一个日期,找这个bug找了2天,后来把e.getMessage()改成打印e,错误才出来,原来是GSON转换日期出错了,换了一个转json的工具就好了