淺談java異常處置(父子異常的處置)。本站提示廣大學習愛好者:(淺談java異常處置(父子異常的處置))文章只能為提供參考,不一定能成為您想要的結果。以下是淺談java異常處置(父子異常的處置)正文
我現在學java異常處置的時刻,關於父子異常的處置,我記得幾句話“子類辦法只能拋出父類辦法所拋出的異常或許是其子異常,子類結構器必需要拋出父類結構器的異常或許其父異常”。誰人時刻還不曉得子類辦法為何要如許子拋出異常,後來經由過程進修《Thinking in Java》,我才明確個中的事理,如今我再來復習一下。
1、子類辦法只能拋出父類辦法的異常或許是其子異常
關於這類限制,重要是由於子類在做向上轉型的時刻,不克不及准確地捕捉異常
package thinkinginjava; public abstract class InningDemo1 { public void walk() throws BaseException{} public abstract void sing() throws BaseException; } class BaseException extends Exception{} class SubException1 extends BaseException{} class CupException extends Exception{}
package thinkinginjava; public interface OtherFunction { public void task() throws RuntimeException; }
package thinkinginjava; public class SubInningDemo1 extends InningDemo1 implements OtherFunction{ //子類辦法可以拋出父類辦法的異常 @Override public void walk() throws BaseException{} //但不克不及拋出父類中沒有的異常,不然編譯會失足 //public void walk() throws Exception{} //子類辦法可以拋出父類辦法的子異常 @Override public void sing() throws SubException1{} //當完成的接口和父類中的辦法都有異常時,可以選擇不拋出異常 public void task(){} }
就拿這個例子來講,假設子類中有這辦法 public void walk() throws CupException{},拋出了父類辦法沒有的異常,我們應用父類的援用指向子類
public void f(){ InningDemo1 inn = new SubInningDemo1(); inn.walk() ;//父類挪用walk()辦法時,其實不曉得它會拋出CupException,從而f()辦法不知若何捕捉異常。是以在編譯期就要避免子類辦法亂拋異常。 }
從下面的例子中,我們也能夠看到,子類辦法可以不拋出異常
2、子類結構器必需要拋出父類結構器的異常或許其父異常
這是由於子類結構器中默許添加了父類的結構器
package thinkinginjava; public abstract class InningDemo2 { public InningDemo2() throws SubException{ } } class FatherException extends Exception{} class SubException extends FatherException{} class PenException extends Exception{}
package thinkinginjava; public class SubInningDemo2 extends InningDemo2{ public SubInningDemo2() throws FatherException { //子類結構器中默許添加了父類的結構器,所以須要拋出父類的異常或許其父異常 //super(); } }
3、異常喪失
1、在finally中拋出異常,能夠會之前拋出的異常喪失
package thinkinginjava; public class FinallyException { public static void main(String[] args){ try{ try{ throw new RedException(); }finally{ //把上一個異常籠罩失落 throw new BlueException(); } }catch(Exception e){ System.out.println(e); } } } class RedException extends Exception{} class BlueException extends Exception{}
運轉成果:thinkinginjava.BlueException
2、在finally中應用return,不會拋出異常
package thinkinginjava; public class ReturnException { public static void main(String[] args){ try{ throw new Exception(); }finally{ return; } } }
以上代碼我們看到它拋出了異常,但運轉時不會有任何輸入
以上這篇淺談java異常處置(父子異常的處置)就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。