異常是擾亂程式正常執行流程的例外事件。當異常發生時,會產生一個稱為異常對象的對象,其中包含異常的詳細信息,如名稱、描述、程序狀態。在本節中,我們將編寫一個 java 程式來處理 java 中存在的不同異常方法。
有三種類型的例外狀況 −
Checked exception − Checked exceptions是編譯時異常,即在程式編譯期間進行檢查。這些異常不能被忽略,必須由程式設計師處理。例如:IOException,SQLException,ClassNotFounException。
未檢查的異常 - 未檢查的異常是運行時異常,即它們在編譯期間被忽略,在程式執行期間被檢查。例如:NullPointerException(空指標異常)、ArithmeticException(算術異常)和ArrayIndexOutOfBoundsException(陣列越界異常)。
錯誤 − 錯誤是不可恢復的異常,通常是由於Java虛擬機器或系統資源的問題而發生。錯誤與異常不同,錯誤不應由程式設計師捕獲或處理,因為它們告訴我們有嚴重問題,而且程式無法修復。例如:OutOfMemoryError,StackOverflowError。
異常處理是處理程序執行過程中引發的異常的過程,以使執行流程不會中斷。這是使用 Java 中的 try-catch 區塊完成的。 Try區塊包含可能拋出異常的程式碼,catch區塊包含處理異常的程式碼。
我們可以使用內建異常或建立自訂或使用者定義的異常。自訂異常擴充 Exception 類別或 RuntimeException 類別。
Java提供了許多方法來處理這些異常。其中一些方法是 -
getMessage() − 此方法用於將錯誤訊息作為字串傳回。這是Java中Throwable類別中定義的一個方法。
try { // some code that may throw an exception } catch (Exception e) { String message = e.getMessage(); System.out.println("Exception occurred: " + message);
getStackTrace() - 此方法傳回導致異常的方法呼叫序列的陣列。這是Java中Throwable類別中定義的方法。
try { // some code that may throw an exception } catch (Exception e) { StackTraceElement[] st = e.getStackTrace(); for (StackTraceElement ele : st) { System.out.println(ele.toString()); } }
printStackTrace() - 此方法列印導致例外狀況的方法呼叫序列的陣列。這是Java中Throwable類別中定義的方法。
try { // some code that may throw an exception } catch (Exception e) { e.printStackTrace(); }
Throw − 'throw'是Java中用來明確拋出例外的關鍵字。當執行這個關鍵字時,正常的程式流程會被停止,它會拋出一個異常,最近的catch語句會捕捉這個異常。
public void divide(int a, int b) { if (b == 0) { throw new ArithmeticException("Cannot divide by zero!"); // throws Arthemetic Exception } int result = a / b; System.out.println("Result: " + result); }
getCause() − 這個方法傳回引發此例外的其他例外的原因。如果原因未知,則傳回'null'。這是Java中Throwable類別中定義的一個方法。
try { // some code that may throw an exception } catch (Exception e) { Throwable cause = e.getCause(); if (cause != null) { System.out.println("Cause: " + cause.toString()); } else { System.out.println("No cause found."); } }
try-catch 區塊 - java 中的 try-catch 區塊用於處理異常。 try 區塊包含可能引發異常的程式碼。 catch 區塊捕獲異常並處理異常。一次嘗試後可以跟隨一組 catch 區塊。
try { // Protected code } catch (ExceptionName e1) { // Catch block }
現在,我們將詳細討論Java中處理方法異常的不同方法。
在這種方法中,我們將使用單一 try 和單一 catch 區塊來處理發生的異常。
使用隨機值初始化一個陣列。
嘗試存取陣列中的元素,使得索引應大於陣列的長度。將此程式碼寫入 try 區塊中,因為它會引發異常。
一旦異常發生,使用catch()方法捕獲ArrayIndexOutOfBounds異常,並使用getMessage()方法列印訊息,並使用printStackTrace()方法列印方法呼叫的順序。
在這個範例中,我們在try和catch區塊中編寫程式碼。在try區塊中,我們用5個值初始化一個數組,並且存取數組的第8個元素,這通常會拋出一個例外「ArrayIndexOutOfBoundsException」。 catch區塊捕捉這個異常,並使用getMessage()方法列印錯誤訊息,printStackTrace()方法用於列印異常發生時的方法呼叫序列。
import java.util.*; public class Main { public static void main(String[] args) { try { int[] arr = {1, 2, 3,4,5}; System.out.println(arr[8]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("An exception occurred: " + e.getMessage()); e. printStackTrace() ; } } }
An exception occurred: Index 8 out of bounds for length 5 java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 5 at Main.main(Main.java:6)
在這個方法中,我們將使用單一try和多個catch區塊來處理發生的例外狀況。
宣告一個try區塊並初始化兩個整數變量,分別為numerator和denominator。 denominator變數被初始化為0。
現在,如果分母值等於 0,則拋出 ArithmeticException。
編寫多個catch區塊來處理不同的例外狀況。
在java中使用不同的內建方法並列印異常訊息和發生的異常。
在此示例中,我们使用了一个 try 块,后跟多个 catch 块。如果从 try 块中抛出 ArithmeticException,则执行处理 ArithmeticException 代码的 catch 块。如果 try 块抛出 NullPointerException,则执行该特定的 catch 块。如果 catch 块不处理 try 块引发的特定异常,则执行最后一个 catch 块代码,因为它正在处理通用异常情况。从示例中,当分母值初始化为零时,我们使用“throw”关键字抛出一个 ArthemeticException,并执行处理 ArthemeticException 的 catch 块。
import java.util.*; public class Main { public static void main(String[] args) { try { int numerator = 10, denominator = 0 ; if(denominator == 0) { throw new ArithmeticException(); } } catch (ArithmeticException e) { System.out.println("ArithmeticException caught."); System.out.println("Message: " + e.getMessage()); System.out.println("Stack Trace: "); e.printStackTrace(); System.out.println("Cause: " + e.getCause()); } catch (NullPointerException e) { System.out.println("NullPointerException caught."); System.out.println("Message: " + e.getMessage()); System.out.println("Stack Trace: "); e.printStackTrace(); System.out.println("Cause: " + e.getCause()); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("ArrayIndexOutOfBoundsException caught."); System.out.println("Message: " + e.getMessage()); System.out.println("Stack Trace: "); e.printStackTrace(); System.out.println("Cause: " + e.getCause()); }catch (Exception e) { System.out.println("NullPointerException caught."); System.out.println("Message: " + e.getMessage()); System.out.println("Stack Trace: "); e.printStackTrace(); System.out.println("Cause: " + e.getCause()); } } }
ArithmeticException caught. Message: null Stack Trace: java.lang.ArithmeticException at Main.main(Main.java:7) Cause: null
因此,在本文中,我们讨论了处理Java编程语言中异常方法的不同方法。
以上是處理異常方法的Java程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!