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