java--寫在 try 中的創建連接

1. 背景

在 Java 開發中,很多資源(數據庫連接、ZooKeeper 連接、Redis 客戶端、文件流等)都需要手動關閉。如果忘記關閉,會導致 資源泄漏(連接占滿、內存泄漏、文件句柄耗盡等)。

為了避免這種問題,Java 提供了兩種方式來管理資源關閉:

  • 傳統 try-finally(Java 7 之前)

  • try-with-resources(Java 7+ 引入,推薦 ?)


2. 傳統 try-finally 寫法

Connection conn = null;
try {conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");// 使用連接System.out.println("連接成功!");
} catch (SQLException e) {e.printStackTrace();
} finally {if (conn != null) {try {conn.close(); // 手動關閉} catch (SQLException e) {e.printStackTrace();}}
}

特點

  • 必須在 finally 中手動關閉資源。

  • 代碼冗余,容易忘記寫。

  • 多個資源時,finally 代碼會很長。


3. Java 7+ try-with-resources 寫法(推薦)

只要資源類實現了 AutoCloseableCloseable 接口,就能在 try 中創建,Java 會在執行完 try 后自動關閉資源。

try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456")) {// 使用連接System.out.println("連接成功!");
} catch (SQLException e) {e.printStackTrace();
}
// 這里不需要寫 finally,conn 會自動關閉

特點

  • 簡潔,少寫很多 finally

  • 更安全,不會忘記關閉資源。

  • 支持多個資源同時管理:

    try (InputStream in = new FileInputStream("a.txt");OutputStream out = new FileOutputStream("b.txt")) {// 同時使用 in 和 out
    }
    

4. 常見應用場景

(1)數據庫連接

try (Connection conn = DriverManager.getConnection(url, user, pass)) {// 執行 SQL
}

(2)ZooKeeper(Curator)

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
try (CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60000, 15000, retryPolicy)) {client.start();// ZooKeeper 操作
}

(3)Redis(Jedis)

try (Jedis jedis = new Jedis("localhost", 6379)) {jedis.set("key", "value");
}

(4)文件流

try (FileInputStream fis = new FileInputStream("a.txt")) {int data;while ((data = fis.read()) != -1) {System.out.print((char) data);}
}

5. 總結對比

寫法關閉方式代碼量出錯風險
try-finally手動關閉冗余多容易忘記關閉
try-with-resources自動關閉(需實現 AutoCloseable簡潔安全,推薦 ?

? 結論

  • 如果用的是 Java 7 及以上版本,強烈推薦使用 try-with-resources

  • 這種寫法常用于 數據庫、ZooKeeper、Redis、IO 流 等需要關閉的資源管理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95470.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95470.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95470.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

蔡文勝在香港買了一棟樓,免費給創業者辦公

蔡文勝在香港買了一棟樓,免費給創業者辦公。前段時間,蔡文勝出售美圖公司、套現約8億港幣后,以6.5億港元購入香港天后道上全幢物業,并將其更名為“CAI大廈”。一樓是咖啡廳,二樓做公眾活動,樓上會有兩層會開…

FOC+MCU:重新定義吸塵器電機控制——高效、靜音、智能的終極解決方案

傳統吸塵器電機的“三重困境”當前吸塵器市場,消費者對吸力、噪音、續航的訴求日益嚴苛,但傳統電機控制方案(如方波驅動、有感/無感BLDC控制)難以兼顧:效率低下:高速運行時電機發熱嚴重,電池能量…

樹形組件,支持搜索展示,自定義展示,支持vue2,vue3,小程序等等

效果圖平臺兼容性Vue2Vue3ChromeSafariapp-vueapp-nvueAndroidiOS鴻蒙√√√√√√---微信小程序支付寶小程序抖音小程序百度小程序快手小程序京東小程序鴻蒙元服務QQ小程序飛書小程序快應用-華為快應用-聯盟√√√√√√-√√√√多語言暗黑模式寬屏模式√屬性屬性名類型默認值…

元宇宙與教育變革:沉浸式學習重構知識獲取與能力培養

1 元宇宙打破傳統教育的核心局限1.1 突破空間限制:從 “固定教室” 到 “全域學習場景”傳統教育受限于物理空間,優質資源集中在少數學校與城市,而元宇宙通過 “虛擬場景復刻 跨地域實時交互”,將學習空間拓展至全球乃至虛擬維度…

如何在SpringBoot項目中優雅的連接多臺Redis

如何在SpringBoot項目中優雅的連接多臺Redis 在Spring Boot項目中,連接單個Redis實例是常見需求,但有時需要同時連接多個Redis實例(例如,主Redis用于業務數據存儲,另一個Redis用于爬蟲數據緩存)。本文將基于…

追覓科技舉辦2025「敢夢敢為」發布會,發布超30款全場景重磅新品

上海,2025年9月4日——在以「敢夢敢為」為主題的2025新品發布會上,追覓科技一次性發布超30款新品,全面涵蓋智能清潔、智能家電、家庭健康與個護等核心領域。在清潔家電與大家電“高端智能生態矩陣”已然成型的當下,追覓科技正在邁…

去服務器化的流媒體分發:輕量級RTSP服務的技術邏輯與優勢

一、設計背景:RTSP/RTP協議的技術根基 在流媒體傳輸體系中,RTSP(Real-Time Streaming Protocol) RTP/RTCP 組合被廣泛認為是最經典、最標準化的解決方案。 RTSP 作為應用層協議,本質上是一個 遠程會話控制協議。它通過…

mysql分頁SQL

在 MySQL 中,實現分頁查詢通常使用 LIMIT 子句。LIMIT 可以指定返回結果的起始位置和數量,非常適合實現分頁功能。 基本語法如下: SELECT 列名 FROM 表名 WHERE 條件 ORDER BY 排序字段 [ASC|DESC] LIMIT 起始位置, 每頁顯示數量;說明&#x…

刷新記錄:TapData Oracle 日志同步性能達 80K TPS,重塑實時同步新標準

在當前數據驅動的企業環境中,高效、穩定的數據同步能力已成為支撐關鍵業務系統的核心需求。尤其在高頻變更、大量增量數據的業務場景中,傳統的 Oracle 日志解析方案往往在吞吐能力和延遲控制方面力不從心。 隨著企業全面邁入“實時化”時代,金…

Java全棧開發面試實戰:從基礎到高并發的深度解析

Java全棧開發面試實戰:從基礎到高并發的深度解析 在一次真實的面試中,一位擁有5年全棧開發經驗的程序員,面對來自某互聯網大廠的技術面試官,展現出了扎實的基礎與豐富的項目經驗。以下是這次面試的完整記錄。 面試官開場 面試官&a…

【mac】如何在 macOS 終端中高效查找文件:五種實用方法

【mac】如何在 macOS 終端中高效查找文件:五種實用方法 在 macOS 上,終端是一個強大的工具,不僅可以執行命令,還能幫助你快速找到需要的文件。無論是按文件名、類型、大小,還是文件內容搜索,都有多種命令可…

React筆記_組件之間進行數據傳遞

目錄父子組件傳值- props父傳子子傳父嵌套組件傳值-Context API概念React.createContext APIProvider組件正確示例錯誤示例消費 ContextReact.Consumer組件useContext Hook區別使用場景舉例說明-用戶信息狀態管理-Redux父子組件傳值- props 在React中父子組件傳值是單向數據流…

Elixir通過Onvif協議控制IP攝像機,擴展ExOnvif的攝像頭停止移動 Stop 功能

ExOnvif官方文檔 在使用 Elixir 進行 IPdome 控制時,可以使用 ExOnvif 庫。 ExOnvif官方文檔中未給停止移動調用命令,自己按照onvif協議 Onvif協議 擴展的此項功能; 停止移動 Stop 在Onvif協議中,用于停止云臺移動的操作為Stop…

spring boot autoconfigure 自動配置的類,和手工 @configuration + @bean 本質區別

它們在本質功能上都是為了向 Spring 容器注冊 Bean,但在觸發方式、加載時機、可控性和適用場景上有明顯區別。可以這樣理解:1?? 核心區別對比維度Configuration Bean(手工配置)Spring Boot EnableAutoConfiguration / 自動配置…

論文解讀 | Franka 機器人沉浸式遠程操作:高斯濺射 VR 賦能的遙操框架研發與應用

研究背景 在工業制造、危險環境作業等領域,機器人遠程操作技術是突破人類作業邊界的關鍵手段。傳統遠程操作依賴2D 相機反饋與操縱桿控制,存在空間感知差、操作精度低、沉浸感弱等問題,難以滿足復雜移動操作任務需求。 例如在核設施退役、災后…

【Unity Shader學習筆記】(四)Shader編程

一、OpenGL與DirectX 這是計算機圖形學中兩個最核心的應用程序接口(API),它們充當了應用程序與顯卡硬件之間的橋梁,讓開發者能夠調用GPU進行圖形渲染和通用計算。 特性維度 OpenGL DirectX 主導公司 Khronos Group (原SGI) Microsoft

程序員之電工基礎-初嘗線掃相機

一、背景 興趣愛好來了,決定研發一個產品。涉及到電工和機械等知識,所以記錄一下相關的基礎知識。本期主題是初嘗線掃相機,雖然又回到了編程,但是對于我來說,硬件集成的經驗不足,缺乏相機、鏡頭的專業知識。…

qt QWebSocket詳解

1、概述 QWebSocket是Qt網絡模塊中的一個類,用于實現WebSocket協議的通信。WebSocket是一種全雙工的通信協議,允許在客戶端和服務器之間建立實時的雙向通信。QWebSocket提供了對WebSocket協議的支持,使得開發者能夠在Qt應用中方便地實現實時…

Java基礎IO流全解析:常用知識點與面試高頻考點匯總

Java基礎IO流全解析:常用知識點與面試高頻考點匯總 前言 IO(Input/Output)流是Java中處理數據傳輸的核心機制,無論是文件操作、網絡通信還是數據持久化,都離不開IO流的身影。對于Java初學者而言,IO流的分類…

PDF.AI-與你的PDF文檔對話

本文轉載自:PDF.AI-與你的PDF文檔對話 - Hello123工具導航 ** 一、🤖 PDF.AI:秒懂 PDF 的智能對話助手 PDF.AI 是一款超實用的AI 文檔分析工具,專門幫你快速搞定各種 PDF 文件。不管多長的合同、報告或論文,你只需上…