Exception是程序正常运行时可以预料到并且应该被捕获的情况,Error是指在正常情况下不太可能出现的情况。绝大部分Error都会导致程序处于非正常、不可恢复的情况,所以不便于也不应该被捕获,比如OutofMemoryError。Exception分为checked和unchecked,checked在代码里必须显式捕获,比如IOException,而unchecked是不可查异常,比如NullPointerException、ArrayIndexOutOfBoundException,通常是可以编码避免的逻辑错误。
抛异常的最佳实践:throw early,catch late。
try-catch会产生额外的性能开销,建议仅捕获有必要的代码段,不要一个大的try包住整段代码。
java每实例化一个Exception都会进行栈快照,有种优化方式是尝试创建不进行栈快照的Exception。
NoClassDefFoundError和ClassNotFoundException的区别: