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 塊的內部工作
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>