淺談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異常處置(父子異常的處置)就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。