异常与错误
异常处理机制:
性能:
Try-catch代码:会产生额外的性能开销\影响JVM对代码的优化,所以建议仅仅捕获有必要的代码段,尽量不要整段包住;与此同时,利用异常控制代码流程,也比条件语句(if/else,switch)更低效。
Java每实例化一个Exception,都会对当时的栈进行快照,[当服务出现变慢,吞吐量下降时,检查发生最频繁的Exception是种思路]
Excetion和Error的区别:
继承:都继承了Throwable类。只有Throwable类型的实例才可以被抛出或者捕获,踏实异常处理机制的基本组成类型。
分类:不同情况的分类
Exception:
可检查异常:在源代码里必须显式捕获处理,这是编译期检查的一部分
不检查异常:运行时异常、
Error:
异常处理的两个基本原则
第一、尽量不要捕获类似Exception的通用异常,而应捕获特定异常。
第二、不要生吞异常。可能会导致难以诊断的诡异情况。
尤其是对于分布式系统,如果发生异常,但无法找到堆栈轨迹(stacttrace),这纯属是为诊断设置障碍。所以,最好使用产品日志,详细地输出到日志系统里。
Throw early,catch late原则
发现问题,第一时间抛出能更加清晰地反映问题
捕获异常,生吞\自定义异常