對於下面的方法,是不是還好拋出異常時,它是不是一個「嘗試」塊內?Java中,使用耐摔不try塊
public void setCapacity(x) throws CapacityExceededException {
if (x > 10) throw new CapacityExceededException(x);
else this.x = x;
}
對於下面的方法,是不是還好拋出異常時,它是不是一個「嘗試」塊內?Java中,使用耐摔不try塊
public void setCapacity(x) throws CapacityExceededException {
if (x > 10) throw new CapacityExceededException(x);
else this.x = x;
}
是的,當它不在try塊內時拋出異常是可以的。你所要做的就是聲明你的方法拋出一個異常。否則編譯器會給出錯誤。
public void setCapacity(x) throws CapacityExceededException {
if (x > 10) throw new CapacityExceededException(x);
else this.x = x;
}
您甚至不必這樣做,如果你CapacityExceededException
延長運行時異常。
public void setA(int a) {
this.a = a;
if(a<0) throw new NullPointerException();
}
此代碼不會給出任何編譯器錯誤。由於NPE是RuntimeException。
當你拋出一個異常,該異常將被傳播到所謂setCapacity()
方法的方法。該方法必須通過try catch來處理異常,或者通過重新拋出它來將它傳播到調用棧中。
只需添加一個throws
聲明:
public int getCapacity() throws CapacityExceededException {
// Something goes here
}
否則,你會得到編譯器警告。這將得到拋出異常的方法。但是,只要您執行該方法,就必須使用try
塊。這是因爲執行該方法可能會引發異常。
try {
getCapacity()
} catch (CapacityExceededException e) {
// Do Something
}
是的,它是確定的。只需要爲方法添加throws子句以防引發檢查異常。對於拋出異常沒有限制的try子句。例如,如果你有一個堆棧,並調用pop()
方法和大小爲零,你可以檢查它並拋出一個異常。無論您打算如何調用此方法,都可能需要捕獲異常。否則,這個未捕獲的異常將向上移動調用堆棧,並且最終將由JVM處理,並且它將在System.err
流上打印堆棧跟蹤。我們也可以指定自己的處理程序,如果我們想:
public class CustomUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
public void uncaughtException(Thread t, Throwable e) {
// Write the custom logic here
}
}
你甚至都不需要提及的例外拋出,如果它是一個RunTimException
。
RunTimException?噢親愛的... – Zizouz212
......當它不在「try」塊內時拋出異常是否可以?
當然它是!
事實上...那就是拋出異常最常見的方式。
事實上2 ...如果我們不使用異常喜歡,他們將是(幾乎)多餘的,因爲我們可以(幾乎)與「打破標籤」和本地變量來保存異常信息替換它們。
1 - 前提是例外是選中,或者你在方法簽名中聲明它。
2 - 即RuntimeException
,Error
或後代相同。
'throw''''' catch'ing(或'try'ing' catch')是不同的東西 – kaykay