throw
和 throws
在 Java 中是兩個與異常處理相關的關鍵字,但它們的作用和使用場景有所不同。
throw
用於在方法內部主動丟擲一個異常物件。例如:
if (condition) {
throw new RuntimeException("自定義的異常資訊");
}
throws
則用於在方法宣告處指明該方法可能丟擲的異常型別。例如:
public void method() throws IOException {
// 方法體,如果可能產生 IOException 則不進行處理,而是宣告丟擲
}
它們的主要區別包括:
- 位置不同
throw
出現在方法體內部,用來丟擲具體的異常物件。throws
出現在方法宣告處,列出方法可能丟擲的異常型別。
- 作用不同
throw
用於主動丟擲異常,以中斷當前程式的執行流程。throws
只是告知呼叫者該方法可能會丟擲這些異常,呼叫者需要處理這些可能的異常。
- 數量不同
throw
每次只能丟擲一個異常物件。throws
可以宣告丟擲多個異常型別,用逗號分隔。
- 處理方式不同
- 對於
throw
丟擲的異常,如果方法內部沒有捕獲處理,會將異常傳遞給上層呼叫者。 - 對於
throws
宣告的異常,如果呼叫者不進行處理,會導致編譯錯誤。
- 對於
例如,下面是一個綜合使用 throw
和 throws
的示例:
public class ThrowThrowsExample {
public static void main(String[] args) {
try {
method1();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void method1() throws IOException {
if (someCondition) {
throw new IOException("IO 異常");
}
}
}
總之,throw
用於在方法內部丟擲異常,而 throws
用於在方法宣告中告知可能丟擲的異常型別。合理使用它們可以有效地進行異常處理和提高程式碼的健壯性。