day02Java核心技术36讲(Exception与Error的区别)

一、Throwable继承关系
day02Java核心技术36讲(Exception与Error的区别)
Throwable:异常处理机制的基本类型。
     Exception:程序正常运行可以预料的意外情况且应该被捕获。
          checked:可检查异常必须被捕获处理。
          unchecked:运行时异常。
     Error:正常情况下不大可能出现的情况,绝大部分Error会导致程序处于非正常、不可恢复状态。
二、异常处理的两个基本原则
①捕获特定异常;
②不要生吞异常。
三、异常处理机制的昂贵性
①try-catch代码段会产生额外的性能开销。往往会影响JVM对代码进行优化,建议仅捕获有必要的代码段。利用异常控制代码流程远比我们通常意义上的条件语句要低效;
②Java每实例化一个Exception都会对当时的栈进行快照,这是一个比较重的操作
四、ClassNotFoundException与NoClassDefFoundError产生的原因及区别
ClassNotFoundException:Java支持使用class.forName方法来动态地加载类,任意一个类名如果被作为参数传递给这个方法都会导致该类被加载到JVM内存中,如果该类在类路径中没有被找到,那么此时在运行时抛出ClassNotFoundException;
NoClassDefFoundError:如果JVM或者ClassLoader实例尝试加载(可以正常的方法调用,也可能是使用new来创建对象)类的时候却找不到定义。要查找的类在编译的时候是存在的,运行时却找不到了,就会抛出NoClassDefFoundError。该问题的原因可能是打包过程漏掉了部分类或者jar包损坏、篡改
五、经验总结
①不要推诿或者延迟处理异常、就地解决;
②不要在finally中处理返回值;
③请勿在try代码中调用return、break、continue;
④确保finally不会改变返回值。