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 写法(推荐)

只要资源类实现了 AutoCloseable 或 Closeable 接口,就能在 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 流 等需要关闭的资源管理。

相关推荐
兰亭妙微UI设计公司4 分钟前
兰亭妙微软件界面设计公司的解锁按钮设计10大密码
开发语言·前端·javascript
人邮异步社区10 分钟前
C语言好学,还是Python好学?
c语言·开发语言·python
栈帧之外28 分钟前
【C++】红黑树实现
开发语言·c++
程序员老陆29 分钟前
C++中同一个回调函数被多个设备并发调用:并发问题不在“函数”,而在“状态”
开发语言·c++·程序设计
wangchunyu11432 分钟前
JDK8新特性实战(Lambda、Stream、Optional)
java·开发语言
鱼宵36 分钟前
工厂模式实战:消灭魔法数字,把写死的 new 收进一个厂里
开发语言·python
JosieBook43 分钟前
【多线程】两台机器同时抢一个字典:一次并发 Bug 的排查
java·网络·bug
niucloud-admin1 小时前
NIUCLOUD LITE AI开发文档--后台系统结构
开发语言
牛战士coding1 小时前
LLM 选错工具怎么办?提示词之外还需要确定性规则兜底
java·人工智能
今天的砖头有点烫手啊1 小时前
Java 序列化到底怎么选?从 Serializable 到 Protobuf 的演进与选型
java·json