程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 淺談java異常處置(父子異常的處置)

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

編輯:關於JAVA

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved