首頁 > Java > java教程 > 主體

處理異常方法的Java程序

王林
發布: 2023-09-12 11:49:02
轉載
749 人瀏覽過

處理異常方法的Java程序

異常是擾亂程式正常執行流程的例外事件。當異常發生時,會產生一個稱為異常對象的對象,其中包含異常的詳細信息,如名稱、描述、程序狀態。在本節中,我們將編寫一個 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中處理方法異常的不同方法。

方法 1:使用單一 try-catch 區塊

在這種方法中,我們將使用單一 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和多個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中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板