3 回答

TA貢獻1875條經驗 獲得超3個贊
要定義已檢查的異常,請創建子類(或子類的層次結構)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)。同樣你應該避免捕捉Throwable,這可能會導致你Error除了Exceptions 之外還能捕捉到它。

TA貢獻1871條經驗 獲得超13個贊
public class MyException extends Exception {
// special exception code goes here
}
把它扔成:
throw new MyException ("Something happened")
趕上:
catch (MyException e)
{
// something
}

TA貢獻1911條經驗 獲得超7個贊
對于已檢查的例外:
public class MyCustomException extends Exception { }
從技術上講,任何擴展Throwable都可以拋出,但異常通常是Exception類的擴展,以便它們被檢查異常(除了RuntimeException或基于它的類,未檢查),而不是其他常見類型的throwable,Error通常不是為了在JVM內部之外進行優雅處理而設計的。
您也可以將異常設置為非公共,但是您只能在定義它們的包中使用它們,而不是跨包。
至于拋出/捕獲自定義異常,它就像內置的那樣 - throw via
throw new MyCustomException()
并通過
catch (MyCustomException e) { }
添加回答
舉報