亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2016年09月07日 09:57:29   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談java異常處理(父子異常的處理)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

一、子類方法只能拋出父類方法的異?;蛘呤瞧渥赢惓?/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{}
  
  //當實現(xiàn)的接口和父類中的方法都有異常時,可以選擇不拋出異常
  public void task(){}

}

就拿這個例子來說,假如子類中有這方法 public void walk() throws CupException{},拋出了父類方法沒有的異常,我們使用父類的引用指向子類

public void f(){

    InningDemo1 inn = new SubInningDemo1();

    inn.walk() ;//父類調(diào)用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異常處理(父子異常的處理)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • springboot發(fā)布dubbo服務注冊到nacos實現(xiàn)方式

    springboot發(fā)布dubbo服務注冊到nacos實現(xiàn)方式

    這篇文章主要介紹了springboot發(fā)布dubbo服務注冊到nacos實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot自定義轉換器應用實例講解

    SpringBoot自定義轉換器應用實例講解

    SpringBoot在響應客戶端請求時,將提交的數(shù)據(jù)封裝成對象時,使用了內(nèi)置的轉換器,SpringBoot 也支持自定義轉換器,這個內(nèi)置轉換器在 debug的時候,可以看到,提供了124個內(nèi)置轉換器
    2022-08-08
  • java解析{{}}變量名以及文本內(nèi)容替換操作

    java解析{{}}變量名以及文本內(nèi)容替換操作

    這篇文章主要介紹了java解析{{}}變量名以及文本內(nèi)容替換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java中繼承、多態(tài)、重載和重寫介紹

    Java中繼承、多態(tài)、重載和重寫介紹

    這篇文章主要介紹了Java中繼承、多態(tài)、重載和重寫介紹,需要的朋友可以參考下
    2014-07-07
  • Java線程的聯(lián)合用法實例分析

    Java線程的聯(lián)合用法實例分析

    這篇文章主要介紹了Java線程的聯(lián)合用法,結合實例形式分析了java線程聯(lián)合的原理、實現(xiàn)方法及相關操作技巧,需要的朋友可以參考下
    2019-10-10
  • SpringBoot跨域Jsonp和Cors的方法

    SpringBoot跨域Jsonp和Cors的方法

    這篇文章主要介紹了SpringBoot跨域Jsonp和Cors的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • 詳解Mybatis中常用的約束文件

    詳解Mybatis中常用的約束文件

    這篇文章主要介紹了詳解Mybatis中常用的約束文件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • java對象拷貝詳解及實例

    java對象拷貝詳解及實例

    這篇文章主要介紹了java對象拷貝詳解及實例的相關資料,需要的朋友可以參考下
    2017-04-04
  • SpringBoot啟動時自動執(zhí)行代碼的幾種實現(xiàn)方式

    SpringBoot啟動時自動執(zhí)行代碼的幾種實現(xiàn)方式

    這篇文章主要給大家介紹了關于SpringBoot啟動時自動執(zhí)行代碼的幾種實現(xiàn)方式,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • 利用Java8 Optional如何避免空指針異常詳解

    利用Java8 Optional如何避免空指針異常詳解

    Optional可以讓你的代碼具有可讀性,且會避免出現(xiàn)空指針異常。 下面這篇文章主要給大家介紹了關于利用Java8 Optional如何避免空指針異常的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2018-01-01

最新評論