二 Exception&Error
2018-11-15 本文已影响0人
BeYearn
图片.png
- 一个辨析
- NoClassDefFoundError
如果JVM或者ClassLoader实例尝试加载(可以通过正常的方法调用,也可能是使用new来创建新的对象)类的时候却找不到类的定义。要查找的类在编译的时候是存在的,运行的时候却找不到了。这个时候就会导致NoClassDefFoundError. 造成该问题的原因可能是打包过程漏掉了部分类,或者jar包出现损坏或者篡改。解决这个问题的办法是查找那些在开发期间存在于类路径下但在运行期间却不在类路径下的类。 - ClassNotFoundException
当一个应用尝试通过Class.forName("class的名字")去载入这个class的时候,但是却没有找到, 所以是个exception异常
- try-with-resources multiple catch
try (BufferedReader br = new BufferedReader(…);
BufferedWriter writer = new BufferedWriter(…)) {// Try-with-resources
// do something
catch ( IOException | XEception e) {// Multiple catch
// Handle it
}
- try-catch代码会产生额外的性能开销, 尽量不要用一个大的try包住整段代码. 同时利用异常控制代码流程也不好, 比通常意义上的if/else swich要低效
- java每实例话一个exception, 都会对当时的栈进行快照, 这是一个相对较重的操作, 如果异常频繁发生, 该现象就不可忽略了
- trycatch中return finally的执行顺序
- 不管有木有出现异常,finally块中代码都会执行;
- 当try和catch中有return时,finally仍然会执行;
- finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;
- finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。