国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺談java異常處理(父子異常的處理)

2019-11-26 13:52:24
字體:
來源:轉載
供稿:網友

我當初學java異常處理的時候,對于父子異常的處理,我記得幾句話“子類方法只能拋出父類方法所拋出的異?;蛘呤瞧渥赢惓?,子類構造器必須要拋出父類構造器的異常或者其父異?!?。那個時候還不知道子類方法為什么要這樣子拋出異常,后來通過學習《Thinking in Java》,我才明白其中的道理,現在我再來溫習一下。

一、子類方法只能拋出父類方法的異?;蛘呤瞧渥赢惓?/strong>

對于這種限制,主要是因為子類在做向上轉型的時候,不能正確地捕獲異常

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()方法不知如何捕獲異常。因此在編譯期就要防止子類方法亂拋異常?! 

從上面的例子中,我們也可以看到,子類方法可以不拋出異常

二、子類構造器必須要拋出父類構造器的異?;蛘咂涓府惓?/strong>

這是因為子類構造器中默認添加了父類的構造器

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();  }}

三、異常丟失

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異常處理(父子異常的處理)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 库伦旗| 柳江县| 哈尔滨市| 奉化市| 常州市| 龙岩市| 金阳县| 藁城市| 余干县| 苏尼特左旗| 阿图什市| 南靖县| 渑池县| 德庆县| 通辽市| 济阳县| 宕昌县| 汶川县| 正安县| 柞水县| 柏乡县| 梓潼县| 大化| 杭锦旗| 泰顺县| 胶南市| 阳泉市| 巴林左旗| 新密市| 玉山县| 崇信县| 鹤庆县| 长岭县| 广河县| 平乐县| 三原县| 莒南县| 吉隆县| 华容县| 望江县| 海宁市|