天天看點

java 建立異常_如何在Java中建立自定義異常?

小編典典

要定義受檢查的異常,請建立的子類(或子類的層次結構)java.lang.Exception。例如:

public class FooException extends Exception {

public FooException() { super(); }

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

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

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

}

可能引發或傳播此異常的方法必須聲明它:

public void calculate(int i) throws FooException, IOException;

…,并且調用此方法的代碼必須處理或傳播此異常(或同時處理):

try {

int i = 5;

myObject.calculate(5);

} catch(FooException ex) {

// Print error and terminate application.

ex.printStackTrace();

System.exit(1);

} catch(IOException ex) {

// Rethrow as FooException.

throw new FooException(ex);

}

你會在上面的示例中注意到該錯誤IOException已被捕獲并重新抛出為FooException。這是用于封裝異常的常用技術(通常在實作API時)。

有時在某些情況下,你不想強制每個方法在其throws子句中聲明你的異常實作。在這種情況下,你可以建立未經檢查的異常。未經檢查的異常是任何擴充的異常java.lang.RuntimeException(其本身是的子類java.lang.Exception):

public class FooRuntimeException extends RuntimeException {

...

}

方法可以抛出或傳播FooRuntimeException異常而無需聲明。例如

public void calculate(int i) {

if (i < 0) {

throw new FooRuntimeException("i < 0: " + i);

}

}

未經檢查的異常通常用于表示程式員錯誤,例如,将無效的參數傳遞給方法或嘗試破壞數組索引範圍。

該java.lang.Throwable班是所有的錯誤和異常,可以在Java中抛出的根源。 java.lang.Exception和java.lang.Error都是的子類Throwable。子類的任何東西都Throwable可能被抛出或捕獲。但是,捕獲或抛出通常是一種不好的做法,Error因為這是用來表示JVM内部的錯誤,通常不能由程式員“處理”(例如OutOfMemoryError)。同樣,你應該避免catch Throwable,這可能導緻你Error除了Exceptions 之外還捕獲s。

2020-03-16