C語言中文網 目錄

Java try catch finally語句

在實際開發中,根據 try catch 語句的執行過程,try 語句塊和 catch 語句塊有可能不被完全執行,而有些處理代碼則要求必須執行,例如文件的關閉、釋放資源等,此時就可以將這些代碼放在 finally 語句塊中。

finally 語句可以與前面介紹的 try catch 語句塊匹配使用,語法格式如下:
try
{
    邏輯代碼塊
}
catch(ExceptionType e)
{
    異常處理代碼塊
}
finally
{
    清理代碼塊
}

對于以上格式,無論是否發生異常(除特殊情況外),finally 語句塊中的代碼都會被執行。此外,finally 語句也可以和 try 語句匹配使用,其語法格式如下:
try
{
    邏輯代碼塊
}
finally
{
    清理代碼塊
}

提示:finally 與 try 語句塊匹配的語法格式,此種情況會導致異常丟失,所以不常見。

一般情況下,無論是否有異常拋出,都會執行 finally 語句塊中的語句,執行流程如圖 1 所示。


圖1 try catch finally 語句執行流程圖

try catch finally 語句塊的執行情況可以細分為以下 5 種情況:
  1. 如果 try 代碼塊中沒有拋出異常,則執行完 try 代碼塊之后直接執行 finally 代碼塊,然后執行 try catch finally 語句塊之后的語句。
  2. 如果 try 代碼塊中拋出異常,并被 catch 子句捕捉,那么在拋出異常的地方終止 try 代碼塊的執行,轉而執行相匹配的 catch 代碼塊,之后執行 finally 代碼塊。如果 finally 代碼塊中沒有拋出異常,則繼續執行 try catch finally 語句塊之后的語句;如果 finally 代碼塊中拋出異常,則把該異常傳遞給該方法的調用者。
  3. 如果 try 代碼塊中拋出的異常沒有被任何 catch 子句捕捉到,那么將直接執行 finally 代碼塊中的語句,并把該異常傳遞給該方法的調用者。
  4. 在前面的代碼中用 System.exit() 退出運行。如果代碼在 try 內部執行一條 System.exit() 語句,則應用程序將終止而不會執行 finally。
  5. 如果在執行 finally 塊之前,程序所在的線程死亡,finally 塊將不被執行。

【例1】當 Windows 系統啟動之后,即使不作任何操作,在關機時都會顯示“謝謝使用”。下面編寫 Java 程序使用 try catch finally 語句這個過程,具體代碼如下:
public class Test04
{
    public static void main(String[] args)
    {
        Scanner input=new Scanner(System.in);
        System.out.println("Windows 系統已啟動!");
        String[] pros={"記事本","計算器","瀏覽器"};
        try
        {
            //循環輸出pros數組中的元素
            for(int i=0;i<pros.length;i++)
            {
                System.out.println(i+1+":"+pros[i]);
            }
            System.out.println("是否運行程序:");
            String answer=input.next();
            if(answer.equals("y"))
            {
                System.out.println("請輸入程序編號:");
                int no=input.nextInt();
                System.out.println("正在運行程序["+pros[no-1]+"]");
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            System.out.println("謝謝使用!");
        }
    }
}

上述代碼在 main() 方法中使用 try catch finally 語句模擬了系統的使用過程。當系統啟動之后顯示提示語,無論是否運行了程序,或者在運行程序時出現了意外,程序都將執行 finally 塊中的語句,即顯示“謝謝使用!”。輸出時的結果如下所示。
Windows 系統已啟動!
1:記事本
2:計算器
3:瀏覽器
是否運行程序:
y
請輸入程序編號:
2
正在運行程序[計算器]
謝謝使用!
Windows 系統已啟動!
1:記事本
2:計算器
3:瀏覽器
是否運行程序:
y
請輸入程序編號:
5
謝謝使用!
java.lang.ArrayIndexOutOfBoundsException: 4
    at text.text.main(text.java:23)
Windows 系統已啟動!
1:記事本
2:計算器
3:瀏覽器
是否運行程序:
asdfasd
謝謝使用!

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo