
Java 教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java 與 C++
- JVM - Java 虛擬機器
- Java - JDK 與 JRE 與 JVM
- Java - Hello World 程式
- Java - 環境搭建
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode 系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期和時間
Java 控制語句
- Java - 迴圈控制
- Java - 決策制定
- Java - If-else
- Java - Switch
- Java - For 迴圈
- Java - For-Each 迴圈
- Java - While 迴圈
- Java - do-while 迴圈
- Java - Break
- Java - Continue
面向物件程式設計
- Java - OOPs 概念
- Java - 物件和類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 建構函式
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉建構函式
- Java - 列舉字串
Java 內建類
Java 檔案處理
Java 錯誤和異常
- Java - 異常
- Java - try-catch 塊
- Java - try-with-resources
- Java - 多重 catch 塊
- Java - 巢狀 try 塊
- Java - Finally 塊
- Java - throw 異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java 多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 執行緒連線
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java 同步
Java 網路
- Java - 網路
- Java - 套接字程式設計
- Java - URL 處理
- Java - URL 類
- Java - URLConnection 類
- Java - HttpURLConnection 類
- Java - Socket 類
- Java - 泛型
Java 集合
Java 介面
Java 資料結構
Java 集合演算法
高階 Java
- Java - 命令列引數
- Java - Lambda 表示式
- Java - 傳送電子郵件
- Java - Applet 基礎
- Java - Javadoc 註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像 API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional 類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64 編碼解碼
- Java - Switch 表示式
- Java - Teeing 收集器
- Java - 微基準測試
- Java - 文字塊
- Java - 動態 CDS 檔案
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 緊湊數字格式化
- Java - 垃圾回收
- Java - JIT 編譯器
Java 雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - 程序 API 改進
- Java - 流 API 改進
- Java - 增強的 @Deprecated 註釋
- Java - CompletableFuture API 改進
- Java - 流
- Java - 日期時間 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API 和框架
Java 類參考
- Java - Scanner
- Java - 陣列
- Java - 字串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用資源
Java - 帶資源的 try 語句
帶資源的 try 語句
Java 的 try-with-resources 語句是一個try 語句,用於宣告一個或多個資源,例如流、套接字、資料庫、連線等。這些資源必須在程式完成時關閉。try-with-resources 語句在語句結束時關閉資源。
try-with-resources 功能是在 Java7 中引入的。try-with-resources 也可以替代try-catch-finally 用於資源物件。
try-with-resources 語句也稱為“自動資源管理”,它是在 Java7 中引入的。如果您正在使用資源物件,則此語句可以替代 try-catch-finally 語句。
帶資源的 try 語句的語法
要使用此語句,您只需在括號內宣告所需的資源,並在塊結束時自動關閉建立的資源。以下是 try-with-resources 語句的語法
try(resources declarations) { // use of the resources } catch(Exception e) { // exception handling }
例如,使用 try-with-resources 開啟檔案
try(FileReader fr = new FileReader("file path")) { // use the resource } catch () { // body of catch } }
以下程式使用 try-with-resources 語句讀取檔案中的資料。
示例:Java 中的帶資源的 try 語句
在此程式中,我們在 try with resources 語句中建立 FileReader 物件。FileReader fr,引用在 try 語句中宣告,我們不需要記住在 finally 塊中關閉它,因為它將由 JVM 自動關閉,因此不存在記憶體洩漏或連線丟失的可能性。
import java.io.FileReader; import java.io.IOException; public class Try_withDemo { public static void main(String args[]) { try(FileReader fr = new FileReader("E://file.txt")) { char [] a = new char[50]; fr.read(a); // reads the contentto the array for(char c : a) System.out.print(c); // prints the characters one by one } catch (IOException e) { e.printStackTrace(); } } }
具有多個資源的帶資源的 try 語句
您還可以在 try 塊中宣告多個資源。請考慮以下示例:
// This example is to use Try with Resources // with multiple Resources import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; import java.io.IOException; public class Main { public static void main(String[] args) { // try block with multiple resources try ( FileReader fileReader = new FileReader("file1.txt"); BufferedReader bufferedReader = new BufferedReader(fileReader); FileWriter fileWriter = new FileWriter("file2.txt"); PrintWriter printWriter = new PrintWriter(fileWriter) ) { String line; while ((line = bufferedReader.readLine()) != null) { // Read content line by line and write it // to the output (file2.txt) file printWriter.println(line); } System.out.println("Content copied."); } catch (IOException e) { e.printStackTrace(); } } }
示例:不使用帶資源的 try 語句
在以下程式中,我們使用FileReader讀取檔案中的資料,並使用 finally 塊關閉它。在此程式中,我們在 try 塊中建立 FileReader 物件。FileReader fr,引用在 try 塊之外宣告,以便在 try 塊之外訪問它,我們需要記住在 finally 塊中或程式退出之前關閉它,以避免記憶體洩漏或連線丟失的可能性。
import java.io.File; import java.io.FileReader; import java.io.IOException; public class ReadData_Demo { public static void main(String args[]) { FileReader fr = null; try { File file = new File("file.txt"); fr = new FileReader(file); char [] a = new char[50]; fr.read(a); // reads the content to the array for(char c : a) System.out.print(c); // prints the characters one by one } catch (IOException e) { e.printStackTrace(); }finally { try { fr.close(); } catch (IOException ex) { ex.printStackTrace(); } } } }
帶資源的 try 語句:要點
在使用 try-with-resources 語句時,請牢記以下幾點。
要將類與 try-with-resources 語句一起使用,它必須實現AutoCloseable介面,並且其close()方法會在執行時自動呼叫。
您可以在 try-with-resources 語句中宣告多個類。
當您在 try-with-resources 語句的 try 塊中宣告多個類時,這些類將以相反的順序關閉。
除了在括號內宣告資源之外,其他所有內容都與 try 塊的普通 try/catch 塊相同。
在 try 塊開始之前,try 中宣告的資源會被例項化。
在 try 塊中宣告的資源隱式宣告為 final。
Java 9 中帶資源的 try 語句的改進
在 Java 9 之前,資源需要在 try 之前或 try 語句內部宣告,如下面的示例所示。在此示例中,我們將使用 BufferedReader 作為資源來讀取字串,然後關閉 BufferedReader。
Java 9 之前
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; public class Tester { public static void main(String[] args) throws IOException { System.out.println(readData("test")); } static String readData(String message) throws IOException { Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (BufferedReader br1 = br) { return br1.readLine(); } } }
輸出
讓我們編譯並執行上述程式,這將產生以下結果:
test
在這裡,我們需要在 try 語句中宣告一個資源 br1,然後使用它。在 Java9 中,我們不再需要宣告 br1,以下程式將給出相同的結果。
Java 9 及以後版本
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; public class Tester { public static void main(String[] args) throws IOException { System.out.println(readData("test")); } static String readData(String message) throws IOException { Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (br) { return br.readLine(); } } }
輸出
讓我們編譯並執行上述程式,這將產生以下結果:
test