关于异常的一点思考
异常生命周期
异常的来源
- 所有的异常都是抛出来的 有底层api抛出的 有自定义抛出的
异常的处理
1, 运行时异常
- 不做任何处理仍可编译通过 不建议捕获(不建议用异常来做流程控制,异常是程序中的非正常情况)
2, 受检查异常
必须处理,否则编译通过
处理方式:捕获处理 或者抛出处理
异常的终态
1, 对于捕获处理的异常
- 虚拟机不再做额外处理
2, 对于抛出的异常
受检查异常:在编译通过的情况下,会一直抛出直到main 层,如果在main仍然没有 捕获处理 则 虚拟机会调用 e.printstacktrace方法打印异常信息
运行时异常:因为运行时异常会自动抛出一致到被捕获或者main后. 所以在main之前 在main里面,猜想都是和受检查异常保持一致 一致回溯到main,然后虚拟机调用e.printstacktrace打印异常信息
关于编码中各种异常带来的代码健壮性的问题
对于代码中可能出现的各种情况予以处理
对于正常逻辑处理 输入合法或者不合法等
对于异常逻辑处理 读写错误等等
基本原则
api层次的输入输出层次的直接不处理 因为默认输入是合法的 不合法的情况应该在上一层考虑到,进行处理
在最外层包裹一个 try catch , 以防部分未处理的异常,但不要依赖该外层异常的统一处理,应该是在业务层面考虑到,并进行了处理