java--写在 try 中的创建连接

1. 背景

在 Java 开发中,很多资源(数据库连接、ZooKeeper 连接、Redis 客户端、文件流等)都需要手动关闭。如果忘记关闭,会导致 资源泄漏(连接占满、内存泄漏、文件句柄耗尽等)。

为了避免这种问题,Java 提供了两种方式来管理资源关闭:

  • 传统 try-finally(Java 7 之前)

  • try-with-resources(Java 7+ 引入,推荐 ✅)


2. 传统 try-finally 写法

java 复制代码
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 后自动关闭资源。

java 复制代码
try (Connection conn = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/test", "root", "123456")) {
    // 使用连接
    System.out.println("连接成功!");
} catch (SQLException e) {
    e.printStackTrace();
}
// 这里不需要写 finally,conn 会自动关闭

特点

  • 简洁,少写很多 finally

  • 更安全,不会忘记关闭资源。

  • 支持多个资源同时管理:

    java 复制代码
    try (InputStream in = new FileInputStream("a.txt");
         OutputStream out = new FileOutputStream("b.txt")) {
        // 同时使用 in 和 out
    }

4. 常见应用场景

(1)数据库连接

java 复制代码
try (Connection conn = DriverManager.getConnection(url, user, pass)) {
    // 执行 SQL
}

(2)ZooKeeper(Curator)

java 复制代码
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)

java 复制代码
try (Jedis jedis = new Jedis("localhost", 6379)) {
    jedis.set("key", "value");
}

(4)文件流

java 复制代码
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 流 等需要关闭的资源管理。

相关推荐
ERP老兵-冷溪虎山3 小时前
Python/JS/Go/Java同步学习(第三篇)四语言“切片“对照表: 财务“小南“纸切片术切凭证到崩溃(附源码/截图/参数表/避坑指南/老板沉默术)
java·javascript·python·golang·中医编程·四语言同步学习·职场生存指南
科技树支点3 小时前
无GC的Java创新设计思路:作用域引用式自动内存管理
java·python·go·web·编程语言·编译器
boonya3 小时前
桌面应用开发语言与框架选择指南
开发语言·桌面应用
码农小伙3 小时前
ConcurrentHashMap解析
java·开发语言
WhiteJunior3 小时前
Java基础知识点汇总(五)
java·开发语言
搬码临时工3 小时前
怎样让外网计算机访问局域网计算机?通过公网地址访问不同内网服务的设置方法
开发语言·php
晚安里4 小时前
JVM相关 4|JVM调优与常见参数(如 -Xms、-Xmx、-XX:+PrintGCDetails) 的必会知识点汇总
java·开发语言·jvm·后端·算法
Qiang_san4 小时前
C++11新特性 | 欢迎来到现代C++的世界!
开发语言·c++
要做朋鱼燕4 小时前
【C++】迭代器详解与失效机制
开发语言·c++·算法