Java 異常處理
什麼是例外?
異常是一箇中斷正常執行流程的事件。這是 Java 程式執行期間的中斷。
在本教程中,你將學習 -
- 什麼是例外?
- 為什麼我們需要例外?
- 如何處理例外
try...catch
- Java 異常類層次結構
- Java Finally Block
有兩種型別的錯誤:
- 編譯時間錯誤
- 執行時錯誤
編譯時錯誤可以再次分類為兩種型別:
- 語法錯誤
- 語義錯誤
語法錯誤示例:
假如你不是用 int a;
,而是錯誤地用 in a;
,那麼編譯器會丟擲錯誤。
示例:你已宣告變數 int a;
並在一些程式碼行之後再次將整數宣告為 int a;
。編譯程式碼時會突出顯示所有這些錯誤。
執行時錯誤示例
執行時錯誤稱為異常錯誤。任何事件都會中斷正常的程式執行流程。
例外的例子有,算術異常,Nullpointer 異常,除零異常等。
Java 中的異常是開發人員無法控制的。
為什麼我們需要 Exception?
假設你已編寫了一個程式來訪問伺服器。在開發程式碼時,工作正常。
在實際生產執行期間,伺服器已關閉。當你的程式嘗試訪問它時,會引發異常。
如何處理異常
到目前為止,我們已經看到,異常超出了開發人員的控制範圍。但是將程式碼失敗歸咎於環境問題並不是解決方案。你需要一個強大的程式設計,它可以處理異常情況。這樣的程式碼稱為異常處理程式。
在我們的示例中,當伺服器關閉時,良好的異常處理將連線到備份伺服器。
要實現此功能,請輸入你的程式碼以連線到伺服器(使用傳統的 if 和 else 條件)。
你將檢查伺服器是否已關閉。如果是,請編寫程式碼以連線到備份伺服器。
當你的程式碼有多個 java 異常要處理時,使用 if
和 else
迴圈的這種程式碼組織無效。
class connect{
if(Server Up){
//code to connect to server
}
else{
//code to connect to BACKUP server
}
}
try...catch
語法
Java 提供內建的特殊處理。
- 正常程式碼進入
try
塊。 - 異常處理程式碼進入
catch
塊
class connect {
try {
// code to connect to the server
}
catch {
// code to connect ot backup server
}
}
在我們的示例中,try
塊將包含連線到伺服器的程式碼。 catch
塊將包含連線到備份伺服器的程式碼。
如果伺服器已啟動,將忽略 catch
塊中的程式碼。如果伺服器關閉,則會引發異常,並且將執行 catch 塊中的程式碼。
所以,這就是 Java 中處理異常的方式。
使用 try…catch 的語法
try{
statement(s)
}
catch (exceptiontype name){
statement(s)
}
例
步驟 1: 將以下程式碼複製到編輯器中
class JavaException {
public static void main(String args[]){
int d = 0;
int n = 20;
int fraction = n/d;
System.out.println("End Of Main");
}
}
步驟 2: 儲存檔案並編譯程式碼。使用 java JavaException 命令執行程式
步驟 3: 算術異常 - 除以零如下所示,對於行#5 和行#6 從不執行
步驟 4: 現在讓我們看看 try 和 catch 將如何幫助我們處理這個異常。我們將把導致程式碼行的異常放入 try
塊,然後是 catch
塊。將以下程式碼複製到編輯器中。
class JavaException {
public static void main(String args[]) {
int d = 0;
int n = 20;
try {
int fraction = n/d;
System.out.println("This line will not be Executed");
} catch (ArithmeticException e) {
System.out.println("In the catch Block due to Exception = " + e);
}
System.out.println("End Of Main");
}
}
步驟 5: 儲存、編譯和執行程式碼。你將獲得以下輸出
C:\workspace\java JavaException
In the catch clock due to Exception = java.lang.ArithmeticException: / by zero
End of main
如你所見,處理異常,並執行最後一行程式碼。另請注意,Line #7 將不會被執行,因為一旦異常被引發,控制流就會跳轉到 catch 塊。
注意: AritmeticException 物件 e
包含有關已發生的異常的資訊,該異常可用於執行恢復操作。
Java 異常類層次結構
在執行一個 catch 語句之後,繞過其他語句,並在 try/catch
塊之後繼續執行。巢狀的 catch 塊遵循 Exception 層次結構。
- Java 中的所有異常類都擴充套件了類
Throwable
。Throwable 有兩個子類,Error 和 Exception - Error 類定義了我們的程式在正常情況下不會發生的異常或問題,例如記憶體錯誤、硬體錯誤、JVM 錯誤等
- Exception 類表示我們的程式可以處理的異常,我們的程式可以使用 try 和 catch 塊從這個異常中恢復
- 執行時異常是異常類的子類。這些型別的異常表示在執行時發生的異常,並且在編譯時無法跟蹤。一個很好的例子是除零異常,或空指標異常等
- 在輸入和輸出操作期間生成 IO 異常
- 在多執行緒期間生成 Java 中斷的異常。
**示例:**瞭解 try 和 catch 塊的巢狀
步驟 1: 將以下程式碼複製到編輯器中。
class JavaException {
public static void main(String args[]) {
try {
int d = 1;
int n = 20;
int fraction = n/d;
int g[] = {
1
};
g[20] = 100;
}
/*catch(Exception e){
System.out.println("In the catch clock due to Exception = "+e);
}*/
catch (ArithmeticException e) {
System.out.println("In the catch clock due to Exception = " + e);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("In the catch clock due to Exception = " + e);
}
System.out.println("End Of Main");
}
}
步驟 2: 儲存檔案並編譯程式碼。使用命令 java JavaException
執行程式。
步驟 3: 生成 ArrayIndexOutOfBoundsException
。將整數 d
的值更改為 0.儲存,編譯並執行程式碼。
步驟 4 生成了 ArithmeticException
。
步驟 5: 取消註釋#10 行到#12 行。儲存、編譯和執行程式碼。
步驟 6 編譯錯誤?這是因為 Exception 是 ArithmeticException 異常的基類。ArithmeticException 引發的任何 Exception 都可以由 Exception 類處理。因此,ArithmeticException 的 catch 塊永遠不會被執行,這使得它變得多餘。因此編譯錯誤。
Java finally 語句
無論 try 塊中出現異常,都會執行 finally
語句。finally
是 try
語句的可選項。
try {
statement(s)
} catch (ExceptiontType name) {
statement(s)
} finally {
statement(s)
}
如果在 try 塊中引發異常,則在執行 catch 塊之後執行 finally 塊。
例
步驟 1: 將以下程式碼複製到編輯器中。
class JavaException {
public static void main(String args[]){
try{
int d = 0;
int n =20;
int fraction = n/d;
}
catch(ArithmeticException e){
System.out.println("In the catch clock due to Exception = "+e);
}
finally{
System.out.println("Inside the finally block");
}
}
}
步驟 2: 儲存、編譯和執行程式碼。
步驟 3: 預期輸出。最後,即使引發異常,也會執行塊。
步驟 4: 更改變數 d = 1 的值。儲存,編譯並執行程式碼並觀察輸出。表單底部
摘要:
- 異常是執行時錯誤,它會中斷程式執行的正常流程。執行程式期間的中斷稱為錯誤或異常。
- 錯誤分為兩類
- 編譯時間錯誤 - 語法錯誤,語義錯誤
- 執行時錯誤 - 異常
- 一個強大的程式應該處理所有異常並繼續其正常的程式執行流程。Java 提供了一種內建的特殊處理方法
- 異常處理程式是一組處理異常的程式碼。可以使用 try&catch 在 Java 中處理異常。
try
語句:正常程式碼在此塊上。catch
語句:如果正常程式碼中有錯誤,那麼它將進入此塊