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

相关推荐
k***19542 分钟前
Tomcat的升级
java·tomcat
j***49562 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
代码游侠2 小时前
日历的各种C语言实现方法
c语言·开发语言·学习·算法
草莓熊Lotso2 小时前
unordered_map/unordered_set 使用指南:差异、性能与场景选择
java·开发语言·c++·人工智能·经验分享·python·网络协议
20岁30年经验的码农4 小时前
Spring Cloud Gateway 网关技术文档
java
likuolei5 小时前
XML DOM 节点类型
xml·java·服务器
ZHE|张恒6 小时前
Spring Bean 生命周期
java·spring
夏天的味道٥8 小时前
@JsonIgnore对Date类型不生效
开发语言·python
q***38518 小时前
SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由
java·spring cloud·gateway
小白学大数据8 小时前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python