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

相关推荐
小熊美家熊猫系统4 分钟前
电子合同技术实现与合规实践
java·开发语言·分布式
云烟成雨TD4 分钟前
Agent Scope Java 2.x 系列【3】从零构建 ReActAgent
java·人工智能·agent
ytttr8737 分钟前
C# 定时数据库备份工具
开发语言·数据库·c#
一只叫煤球的猫14 分钟前
ThreadForge 源码解读二:一个 Task 从 submit 到完成,内部到底发生了什么?
java·后端·面试
skywalk816334 分钟前
言知项目后续方向建议
开发语言·学习·编程
阿狸猿1 小时前
论微服务架构及其应用
java·微服务·架构
拉勾科研工作室1 小时前
区块链工程毕业论文题目【249个】
开发语言·javascript
程序员黑豆1 小时前
Java中的字符串【AI全栈开发】
java
namexingyun2 小时前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
z落落2 小时前
C#WinForm控件实战:Panel与单选框动态创建
开发语言·c#