[英]Exception handling when calling a method
假設我有一個方法“ position”,該方法接受2個坐標並創建一個位置對象以將其保持在其中。為確保這些坐標不會超出范圍,將引發InvalidPositionException。
public Position(int x, int y) throws InvalidPositionException {
try {
if (x > 10 || x < 1 || y>10 || y<1) {
throw new InvalidPositionException("Position x = "+x+", y = "+y+" is out of bounds");
} else {
setX(x);
setY(y);
}
} catch (InvalidPositionException e) {
System.err.println(e);
}
}
如果現在我想從另一個類創建一個新的位置對象,則會收到錯誤消息“未報告的異常InvalidPositionException;必須被捕獲或聲明為拋出”
如何在不創建新位置對象的方法的方法簽名中聲明“拋出”的情況下進行這項工作?
轉到InvalidPositionException
類,並使其繼承自RuntimeException
。
RuntimeException
是未經檢查的異常,這意味着編譯器不會強迫您處理它們。 當您超出數組范圍時,這就是一個很好的例子。 您不必每次訪問數組時都需要編寫處理此問題的代碼(例如我們處理IOException
)。 一個類似的示例是NullPointerException
。 但是,在兩種情況下,您都可以編寫代碼來捕獲異常並對其進行處理。
如果您是經過檢查的異常純粹主義者並且不希望使用try-catch
塊,則解決該問題的另一種方法是在輸入數據的任何屏幕中清理數據,並說該數據超出了該范圍。
摘自Joshua Bloch的Effective Java
項目72:贊成使用標准例外
將專家程序員與經驗不足的程序員區分開的一個屬性是,專家努力並且通常實現高度的代碼重用。 例外也不例外,代碼重用是一件好事。 Java庫提供了一組例外,這些例外涵蓋了大多數API的大多數拋出異常的需求。 ...
IllegalArgumentException的使用場合-非null參數值不合適
此代碼是創建IllegalArgumentException的經典示例。 它擴展了RuntimeException,因此您不需要捕獲它。
public Position(int x, int y) {
if (x > 10 || x < 1 || y>10 || y<1) {
throw new IllegalArgumentException("Position x = "+x+", y = "+y+" is out of bounds");
}
setX(x);
setY(y);
}
PS,您可能只需將setX(x)
替換為this.x = x
並且對y替換相同(如果這些設置器中沒有多余的邏輯)。
您需要在創建Position對象的語句周圍包括try-catch
塊。
Position myPosition = null;
try {
myPosition = new Position(a, b);
}
catch (InvalidPositionException e) {
// do something if the exception is caught
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.