java异常

异常处理机制主要回答了三个问题

What:异常类型回答了什么被抛出
where:异常堆栈跟踪回答了在哪抛出;
why:异常信息回答了为什么被抛出;

Error和Exception的区别

从概念角度解析Java的异常处理

Error:程序无法处理的系统错误,编译器不做检查;
Exception:程序可以处理的异常,捕获后可能恢复;
总结:前者是程序无法处理的错误,后者是可以处理的异常。

Exception分类

runtimeException:不可预知的,程序应当自行避免;
非RuntimeException:可预知的,从编译器校验的异常;

从责任角度看

  1. error属于JVM需要承担的责任;
  2. RuntimeException是程序应该承担的责任;
  3. checked exception可检查异常时java编译器应该承担的责任;

java异常

异常处理机制

  1. 抛出异常:创建异常对象,交由运行时系统处理
  2. 捕获异常:寻找合适的异常处理器处理异常,否则终止运行

异常的处理原则

  1. 具体明确:抛出的异常应能通过异常类名和message准确说明异常的类型和产生异常的原因;
  2. 提早抛出:应尽可能早的发现并抛出异常,便于精准定位问题;
  3. 延迟捕获:异常的捕获和处理应尽可能延迟,让掌握更多信息的作用域来处理异常

高效主流的异常处理框架

在用户看来,应用系统发生的所有异常都是应用系统内部的异常

  1. 设计一个通用的继承自runtimeException的异常来同一处理;
  2. 其余异常都统一转译为上述异常AppException;
  3. 在catch之后,抛出上述异常的子类,并提供足以定位的信息;
  4. 由前端接收AppException做统一处理

java异常

try-catch性能

Java异常处理消耗性能的地方

  1. try-catch块影响JVM的优化;
  2. 异常对象实例需要保存栈快照等信息,开销较大;(建议仅捕获可能出现异常的必要的代码段,不要用try-catch包住一个大的代码段 ,也不要用try-catch控制代码流程,因为它的效率远不如if-else,switch之类的高)