Home >> Blog >> Java try catch 區塊應用 catch try 用法

Java try catch 區塊應用 catch try 用法

Java try塊用於封裝可能引發異常的代碼。它必須在方法中使用。

如果 try 塊中的特定語句發生異常,則塊的其餘代碼將不會執行。因此,建議不要將代碼保留在不會拋出異常的 try 塊中。

Java try 塊必須後跟 catch 或 finally 塊。

Java try-catch 的語法

試試{
//可能拋出異常的代碼
}捕捉(Exception_class_Name 參考){}

try-finally 塊的語法

試試{
//可能拋出異常的代碼
}最後{}

Java 捕獲塊

Java catch 塊用於通過在參數中聲明異常類型來處理異常。聲明的異常必須是父類異常(即Exception)或者生成的異常類型。但是,好的方法是聲明生成的異常類型。

catch 塊只能在 try 塊之後使用。您可以將多個 catch 塊與單個 try 塊一起使用。

Java try-catch 塊的內部工作

Java try-catch 塊

JVM首先檢查異常是否被處理。如果不處理異常,JVM 會提供一個默認的異常處理程序來執行以下任務:

  • 打印出異常描述。
  • 打印堆棧跟踪(發生異常的方法的層次結構)。
  • 導致程序終止。

但是,如果應用程序程序員處理了異常,則應用程序的正常流程得以維持,即執行其餘代碼。

沒有異常處理的問題

如果我們不使用 try-catch 塊,讓我們嘗試理解問題。

示例 1

TryCatchExample1.java

公共類 TryCatchExample1 {

公共靜態無效 主要(字符串[]參數){

整數 數據= 50 / 0 ; //可能拋出異常

System.out.println( "剩下的代碼" );

}

}

輸出:

線程“主”java.lang.ArithmeticException 中的異常:/ 為零

如上例所示,其餘代碼未執行(在這種情況下,未打印代碼語句的其餘部分)。

異常之後可能有 100 行代碼。如果不處理異常,則異常下面的所有代碼都不會被執行。

通過異常處理解決

讓我們通過一個 java try-catch 塊來看看上述問題的解決方案。

示例 2

TryCatchExample2.java

公共類 TryCatchExample2 {

公共靜態無效 主要(字符串[]參數){
嘗試
{
整數 數據= 50 / 0 ; //可能拋出異常
}
//處理異常
捕捉(算術異常 e)
{
System.out.println(e);
}
System.out.println( "剩下的代碼" );
}

}

輸出:

java.lang.ArithmeticException: / 由零
其餘代碼

如上例所示,執行了其餘代碼,即打印了代碼語句的其餘部分。

示例 3

在此示例中,我們還將代碼保存在不會引發異常的 try 塊中。

TryCatchExample3.java

公共類 TryCatchExample3 {

公共靜態無效 主要(字符串[]參數){
嘗試
{
整數 數據= 50 / 0 ; //可能拋出異常
// 如果發生異常,剩下的語句不會執行
System.out.println( "剩下的代碼" );
}
// 處理異常
捕捉(算術異常 e)
{
System.out.println(e);
}

}

}

輸出:

java.lang.ArithmeticException: / 由零

在這裡,我們可以看到,如果 try 塊中發生異常,則該塊的其餘代碼將不會執行。

示例 4

在這裡,我們使用父類異常來處理異常。

TryCatchExample4.java

公共類 TryCatchExample4 {

公共靜態無效 主要(字符串[]參數){
嘗試
{
整數 數據= 50 / 0 ; //可能拋出異常
}
// 使用Exception類處理異常
捕獲(異常 e)
{
System.out.println(e);
}
System.out.println( "剩下的代碼" );
}

}

輸出:

java.lang.ArithmeticException: / 由零
其餘代碼

示例 5

讓我們看一個在異常時打印自定義消息的示例。

TryCatchExample5.java

公共類 TryCatchExample5 {

公共靜態無效 主要(字符串[]參數){
嘗試
{
整數 數據= 50 / 0 ; //可能拋出異常
}
// 處理異常
捕獲(異常 e)
{
// 顯示自定義消息
System.out.println( "不能被零除" );
}
}

}

輸出:

不能除以零

例 6

讓我們看一個在 catch 塊中解決異常的示例。

TryCatchExample6.java

公共類 TryCatchExample6 {

公共靜態無效 主要(字符串[]參數){
詮釋 i = 50 ;
詮釋 j= 0 ;
整數 數據;
嘗試
{
數據=i/j; //可能拋出異常
}
// 處理異常
捕獲(異常 e)
{
// 解決 catch 塊中的異常
System.out.println(i/(j+ 2 ));
}
}
}

輸出:

25

例 7

在這個例子中,除了 try 塊,我們還將異常代碼包含在 catch 塊中。

TryCatchExample7.java

公共類 TryCatchExample7 {

公共靜態無效 主要(字符串[]參數){

嘗試
{
整數 數據1 = 50 / 0 ; //可能拋出異常

}
// 處理異常
捕獲(異常 e)
{
// 在 catch 塊中產生異常
整數數據2 = 50 / 0 ; //可能拋出異常

}
System.out.println( "剩下的代碼" );
}
}

輸出:

線程“主”java.lang.ArithmeticException 中的異常:/ 為零

在這裡,我們可以看到 catch 塊不包含異常代碼。因此,請將異常代碼包含在 try 塊中,並僅使用 catch 塊來處理異常。

例 8

在此示例中,我們使用不同類型的異常類 (ArrayIndexOutOfBoundsException) 處理生成的異常 (Arithmetic Exception)。

TryCatchExample8.java

公共類 TryCatchExample8 {

公共靜態無效 主要(字符串[]參數){
嘗試
{
整數 數據= 50 / 0 ; //可能拋出異常

}
// 嘗試使用 ArrayIndexOutOfBoundsException 處理 ArithmeticException
捕捉(ArrayIndexOutOfBoundsException e)
{
System.out.println(e);
}
System.out.println( "剩下的代碼" );
}

}

輸出:

線程“主”java.lang.ArithmeticException 中的異常:/ 為零/p>

例 9

讓我們看一個處理另一個未經檢查的異常的示例。

TryCatchExample9.java

公共類 TryCatchExample9 {

公共靜態無效 主要(字符串[]參數){
嘗試
{
int arr[]= { 1 , 3 , 5 , 7 };
System.out.println(arr[ 10 ]); //可能拋出異常
}
// 處理數組異常
捕捉(ArrayIndexOutOfBoundsException e)
{
System.out.println(e);
}
System.out.println( "剩下的代碼" );
}

}

輸出:

java.lang.ArrayIndexOutOfBoundsException:10
其餘代碼

例 10

讓我們看一個處理已檢查異常的示例。

TryCatchExample10.java

導入 java.io.FileNotFoundException;
導入 java.io.PrintWriter;

公共類 TryCatchExample10 {

公共靜態無效 主要(字符串[]參數){


PrintWriter pw;
試試 {
pw = new PrintWriter( "jtp.txt" ); //可能拋出異常
pw.println( "保存" );
}
// 提供檢查的異常處理程序
捕捉 (FileNotFoundException e){

System.out.println(e);
}
System.out.println( "文件保存成功" );
}
} /p>

輸出:

文件保存成功/p>

the

exception

learn

learn

handling the exception