异常处理机制主要回答了,what,where,why三个问题
什么被抛出,在哪抛出,为什么抛出
Error和Exception的区别
Error:程序无法处理的系统错误,编译器不做检查
Exception:程序可以处理的异常,捕获后可能恢复
RuntimeException:不可预知的,程序应当避免,如数组越界
非RuntimeException:可预知的,从编译器校验的异常,如读取的文件不存在
Java异常的处理原则
具体明确:抛出的异常应能通过异常类名和message准确说明异常的类型和产生异常的原因;
提早抛出:应尽可能早的发现并抛出异常,便于精确定位问题;
延迟捕获:异常的捕获和处理应尽可能延迟,让掌握更多信息的作用域来处理异常
将异常都转换为AppRunTimeException,再交给前端处理,这样返回给用户的信息更加明确。
try-catch 比 if else判断更耗时
try-catch块影响JVM的优化
异常对象实例需要保存栈快照等信息,开销较大