兩種異常 有什么區(qū)別?
RuntimeException newExc=new RuntimeException("司機(jī)一滴酒,親人兩行淚~") ;
newExc.initCause(e);
和
RuntimeException newExc=new RuntimeException(e) ;
//newExc.initCause(e);
RuntimeException newExc=new RuntimeException("司機(jī)一滴酒,親人兩行淚~") ;
newExc.initCause(e);
和
RuntimeException newExc=new RuntimeException(e) ;
//newExc.initCause(e);
2016-08-15
舉報(bào)
2016-08-15
????????區(qū)別在于:這里(new RuntimeException("司機(jī)一滴酒,親人兩行淚"))調(diào)用了RuntimeException這個(gè)新異常的含參構(gòu)造器,異常打印出來(lái)第一行是這樣的:java.lang.RuntimeException: ? ? ? ?司機(jī)一滴酒,親人兩行淚;
而RuntimeException newExc=new RuntimeException(e) 是把捕獲的DrunkException e(喝大了異常)傳進(jìn)去,打印出來(lái)是這樣:java.lang.RuntimeException: ? ? ? ? ? ? ?com.imooc.test.DrunkException: 喝車(chē)別開(kāi)酒!
? ? ????相當(dāng)于上面那個(gè)是先拋出RuntimeException這個(gè)新異常:"司機(jī)一滴酒,親人兩行淚";
而下面那個(gè)則是直接把捕獲的DrunkException(喝大了異常),即原始異常(test1里拋出的異常),拋出。
兩個(gè)都是實(shí)現(xiàn)了異常鏈的功能。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 我也不是很懂,以上都是個(gè)人理解。
2016-08-15
僅僅是構(gòu)造方式的不同,e是異常類(lèi)型的一個(gè)對(duì)象,它本身攜帶著異常形成的原因信息,所以基本上都要通過(guò)它來(lái)創(chuàng)建一個(gè)新的異常,形成所謂的異常鏈,否則那不是就丟失了起初異常成因的信息了。