newExc.initCause(e); 这句话是什么意思 可有可无么
newExc.initCause(e); 这句话是什么意思 可有可无么
newExc.initCause(e); 这句话是什么意思 可有可无么
2015-12-01
这是对异常的一种包装技巧。更底层产生的异常需要上层的代码来进行处理。一般而言,如果上层的代码catch到一个异常以后,你想对更上层的结构抛出一个更高级异常来说明。你可以直接在catch语句块中throw一个新的异常,但是这样的做法是不被提倡的,因为你这样会丢失底层产生的异常的信息。现在假如在你的某段代码会产生FileNotFoundException,你需要通过一个中间的代码向上面抛出一个IOException你有这么两种做法:
try{ 代码... }catch(FileNotFoundException e){ throw new IOException; }
这是第一种,但是这种做法是不被提倡的,因为他会丢掉原始异常。正确的做法是这样的:
try{ 代码... }catch(FileNotFoundException e){ Throable se = new IOException("error..."); se.initCause(e); throw se; }
initCause()的作用你可以理解成是保存原始的异常,当你想要知道底层发生了什么异常的时候调用getCause()就能够获得原始异常。其实这就形成一个异常链了,这对于你的代码是很有帮助的。
举报