当前位置: 首页 > 知识库问答 >
问题:

在哪种情况下,这种资源会泄漏?

壤驷英叡
2023-03-14
class Test {
    public void test() {
        PreparedStatement stmt = null;
        try {
            stmt = HibernateSession.instance().connection().prepareStatement("");
        } catch (final SQLException e) {
            e.printStackTrace();
        } finally {
            if (stmt != null)
                try {
                    stmt.close();
                } catch (final SQLException e) {
                    e.printStackTrace();
                }
        }
    }
}

在哪种情况下会发生这种情况?

共有1个答案

赵正雅
2023-03-14

您需要使用Java7的try with resources或try-finally块:

try(stmt = HibernateSession.instance().connection().prepareStatement("")) {


}

autocloseable继承但不能保证关闭的类型将生成此警告。(或者可能的closeable,我忘了是哪个了)。

既然我明白了您的要求,就编写不那么复杂的代码吧。

Foo f = null; // don't do this, but it's what you're doing
f = new Foo();
try { // don't do this
    stmt.close();
}
catch(SQLException exc) {

}
 类似资料:
  • 问题内容: 这可能是一个琐碎的问题,但阅读ARG和ENV的文档对我而言并不清楚。 我正在构建一个PHP-FPM容器,我想提供启用/禁用某些用户需求扩展的功能。 如果可以在Dockerfile中通过添加条件并在build命令上传递标志来做到这一点,那就太好了,但不支持AFAIK。 就我而言,我的个人方法是在容器启动时运行一个小的脚本,如下所示: 这是我的样子: 如果您需要深入了解我的工作方式,那么这

  • 这可能是一个微不足道的问题,但是阅读ARG和ENV的文档并没有让我明白。 我正在构建一个PHP-FPM容器,我希望能够根据用户需要启用/禁用一些扩展。 如果可以在Dockerfile中通过在构建命令上添加条件和传递标志来实现这一点,那就太好了,但是不支持AFAIK。 在我的情况下,我个人的方法是在容器启动时运行一个小脚本,如下所示: 这就是我的的样子: 目前这是工作,但。。。如果我想添加20个(随

  • 根据Java教程 将包装类型(整数)的对象转换为其相应的基元(int)值称为取消装箱。当包装类的对象为: 作为参数传递给需要相应基元类型的值的方法 分配给相应基元类型的变量 为什么在这种情况下会发生拆箱? 在这种情况下,这些事情发生在哪里?是否有管理数组中元素访问的底层方法?或者[]暗示某种变量?

  • 这是我的建筑。格雷德尔: 我试图找出问题所在,使用以下代码来分析问题: 结果是:

  • 我在使用fs.readfile进行同步时遇到了一个问题,他们没有在第一次初始化,如果我再次尝试请求,那么我就有结果了。我知道我可以用promise和我从Kriskowal找到一些有用的东西。我试过但没有成功。我不太明白如何实施它。如果有人能帮忙,我将永远感激。 代码:

  • 问题内容: 我编写了以下代码来实现Singleton模式: 当我编译此文件时,它应该生成Test.class和Test $ TestHolder.class,但它还会生成Test $ 1.class。这没有道理。那么,为什么以及如何呢? 问题答案: 类需要在中调用私有构造函数。但是它是私有的,实际上不能从另一个类中调用。因此,编译器发挥了作用。它 添加了一个仅知道的新的非私有构造函数!_该构造函数