Java 自定義異常

2018-01-19 17:32 更新

Java面向?qū)ο笤O(shè)計(jì) - Java自定義異常


我們可以創(chuàng)建我們自己的異常類。

它們必須擴(kuò)展現(xiàn)有的異常類。

<Class Modifiers> class <Class Name> extends <Exception Class Name> {
  
}
&lt;Class Name> is the exception class name.

創(chuàng)建一個(gè)MyException類,它擴(kuò)展了java.lang.Exception類。

語法

語法如下:

public class MyException  extends  Exception  {
}

異常類與Java中的任何其他類一樣。通常,我們不向我們的異常類中添加任何方法。

許多有用的方法可以用來查詢異常對(duì)象的狀態(tài)在Throwable類中聲明。


自定義異常類構(gòu)造函數(shù)

通常,我們?yōu)槲覀兊漠惓n惏ㄋ膫€(gè)構(gòu)造函數(shù)。

所有構(gòu)造函數(shù)將使用super關(guān)鍵字調(diào)用其超類的相應(yīng)構(gòu)造函數(shù)。

class MyException extends Exception {
  public MyException() {
    super();
  }

  public MyException(String message) {
    super(message);
  }

  public MyException(String message, Throwable cause) {
    super(message, cause);
  }

  public MyException(Throwable cause) {
    super(cause);
  }
}

第一個(gè)構(gòu)造函數(shù)創(chuàng)建一個(gè)具有null的異常作為其詳細(xì)消息。

第二個(gè)構(gòu)造函數(shù)創(chuàng)建一個(gè)具有詳細(xì)消息的異常。

第三和第四個(gè)構(gòu)造函數(shù)允許您通過包裝/不包含詳細(xì)消息的另一個(gè)異常來創(chuàng)建異常。

您可以拋出類型MyException的異常。

throw new MyException("Your  message  goes  here");

我們可以在方法/構(gòu)造函數(shù)聲明中的throws子句中使用MyException類,或者在catch塊中使用參數(shù)類型。

public void  m1()  throws   MyException  {
}

或捕獲異常類

try  {

}catch(MyException e)  {

}

Throwable

下面的列表顯示了Throwable類的一些常用方法。

Throwable類是Java中所有異常類的超類。此表中顯示的所有方法在所有異常類中都可用。

  • Throwable getCause()
    返回異常的原因。如果未設(shè)置異常的原因,則返回null。
  • String getMessage()
    返回異常的詳細(xì)消息。
  • StackTraceElement[] getStackTrace()
    返回堆棧跟蹤元素的數(shù)組。
  • Throwable initCause(Throwable cause)
    設(shè)置異常的原因。
    有兩種方法可以將異常設(shè)置為異常的原因。其他方法是使用構(gòu)造函數(shù),它接受原因作為參數(shù)。
  • void printStackTrace()
    在標(biāo)準(zhǔn)錯(cuò)誤流上打印堆棧跟蹤。
  • void printStackTrace(PrintStream s)
    將堆棧跟蹤打印到指定的PrintStream對(duì)象。
  • void printStackTrace(PrintWriter s)
    將堆棧跟蹤打印到指定的PrintWriter對(duì)象。
  • String toString()
    返回異常對(duì)象的簡短描述。

例外

以下代碼演示了對(duì)異常類使用printStackTrace()方法。

public class Main {
  public static void main(String[] args) {
    try {
      m1();
    } catch (MyException e) {
      e.printStackTrace(); // Print the stack trace
    }
  }

  public static void m1() throws MyException {
    m2();
  }

  public static void m2() throws MyException {
    throw new MyException("Some  error has  occurred.");
  }
}
class MyException extends Exception {
  public MyException() {
    super();
  }

  public MyException(String message) {
    super(message);
  }

  public MyException(String message, Throwable cause) {
    super(message, cause);
  }

  public MyException(Throwable cause) {
    super(cause);
  }
}

上面的代碼生成以下結(jié)果。

例2

以下代碼顯示了如何將異常的堆棧跟蹤寫入字符串。

import java.io.PrintWriter;
import java.io.StringWriter;

public class Main {
  public static void main(String[] args) {
    try {
      m1();
    } catch (MyException e) {
      String str = getStackTrace(e);
      System.out.println(str);
    }
  }
  public static void m1() throws MyException {
    m2();
  }

  public static void m2() throws MyException {
    throw new MyException("Some  error has  occurred.");
  }

  public static String getStackTrace(Throwable e) {
    StringWriter strWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(strWriter);
    e.printStackTrace(printWriter);

    // Get the stack trace as a string
    String str = strWriter.toString();

    return str;
  }
}

class MyException extends Exception {
  public MyException() {
    super();
  }

  public MyException(String message) {
    super(message);
  }

  public MyException(String message, Throwable cause) {
    super(message, cause);
  }

  public MyException(Throwable cause) {
    super(cause);
  }
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)