Java try catch finally语句
在實際開發中,根據 try catch 語句的執行過程,try 語句塊和 catch 語句塊有可能不被完全執行,而有些處理代碼則要求必須執行。例如,程序在 try 塊里打開了一些物理資源(如數據庫連接、網絡連接和磁盤文件等),這些物理資源都必須顯式回收。
Java的垃圾回收機制不會回收任何物理資源,垃圾回收機制只回收堆內存中對象所占用的內存。為了確保一定能回收 try 塊中打開的物理資源,異常處理機制提供了 finally 代碼塊,并且 Java 7 之后提供了自動資源管理(Automatic Resource Management)技術。
finally 語句可以與前面介紹的 try catch 語句塊匹配使用,語法格式如下:
try {// 可能會發生異常的語句 } catch(ExceptionType e) {// 處理異常語句 } finally {// 清理代碼塊 }對于以上格式,無論是否發生異常(除特殊情況外),finally 語句塊中的代碼都會被執行。此外,finally 語句也可以和 try 語句匹配使用,其語法格式如下:
try {// 邏輯代碼塊 } finally {// 清理代碼塊 }使用 try-catch-finally 語句時需注意以下幾點:
異常處理語法結構中只有 try 塊是必需的,也就是說,如果沒有 try 塊,則不能有后面的 catch 塊和 finally 塊;catch 塊和 finally 塊都是可選的,但 catch 塊和 finally 塊至少出現其中之一,也可以同時出現;可以有多個 catch 塊,捕獲父類異常的 catch 塊必須位于捕獲子類異常的后面;不能只有 try 塊,既沒有 catch 塊,也沒有 finally 塊;多個 catch 塊必須位于 try 塊之后,finally 塊必須位于所有的 catch 塊之后。finally 與 try 語句塊匹配的語法格式,此種情況會導致異常丟失,所以不常見。一般情況下,無論是否有異常拋出,都會執行 finally 語句塊中的語句,執行流程如下圖所示。
try catch finally 語句塊的執行情況可以細分為以下 3 種情況:
1 . 如果 try 代碼塊中沒有拋出異常,則執行完 try 代碼塊之后直接執行 finally 代碼塊,然后執行 try catch finally 語句塊之后的語句。
2 . 如果 try 代碼塊中拋出異常,并被 catch 子句捕捉,那么在拋出異常的地方終止 try 代碼塊的執行,轉而執行相匹配的 catch 代碼塊,之后執行 finally 代碼塊。如果 finally 代碼塊中沒有拋出異常,則繼續執行 try catch finally 語句塊之后的語句;如果 finally 代碼塊中拋出異常,則把該異常傳遞給該方法的調用者。
3 . 如果 try 代碼塊中拋出的異常沒有被任何 catch 子句捕捉到,那么將直接執行 finally 代碼塊中的語句,并把該異常傳遞給該方法的調用者。
除非在 try 塊、catch 塊中調用了退出虛擬機的方法System.exit(int status),否則不管在 try 塊或者 catch 塊中執行怎樣的代碼,出現怎樣的情況,異常處理的 finally 塊總會執行。
通常情況下不在 finally 代碼塊中使用 return 或 throw 等導致方法終止的語句,否則將會導致 try 和 catch 代碼塊中的 return 和 throw 語句失效。
當 Windows 系統啟動之后,即使不作任何操作,在關機時都會顯示“謝謝使用”。下面編寫 Java 程序使用 try catch finally 語句這個過程,代碼如下:
import java.util.Scanner;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: 4at text.text.main(text.java:23) Windows 系統已啟動! 1:記事本 2:計算器 3:瀏覽器 是否運行程序: asdfasd 謝謝使用!總結
以上是生活随笔為你收集整理的Java try catch finally语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C 时间函数
- 下一篇: MySQL字符串类型