为什么需要调用 close() 或 shutdown() 方法?

2024-01-02

我是 Java 新手,高中时有一些 C++ 背景。现在我正在尝试做一些事情,我选择了 Java 作为编程语言。

我已经完成了我的作业并查看了很多关于 Java 的“析构函数”的内容,完成()方法,以及close() or 关闭()方法。但我仍然认为我不知道这应该如何工作(当然更多信息如下)

好的,具体问题是为什么我需要打电话close() or 关闭()方法?

在我的特定情况下,我正在使用一个我没有开发的处理智能卡读卡器的类,但我已经看到文件管理的情况,您必须调用close()方法,会类似。

不是叫一个close()方法与 C++ 中释放内存的想法相同(这很糟糕)?意思是,我必须处理对象的删除或销毁...GC 不是用来的吗?

我尝试用于智能卡读卡器的类可能不是最好的,该类实现以下功能可能会更好完成()方法,因此当不再使用并准备好进行 GC 时,会释放内存(很可能是本机代码)和/或释放 GC 可能不知道如何执行的硬件资源。

但是文件管理类呢?这些都非常使用和维护,为什么还需要一个close()方法?我明白存在的目的,解锁文件,但为什么我必须记住关闭它?一旦不再使用该对象,就会自动解锁该文件,至少在最常见的情况下是这样。

最后,将需要关闭或关闭的类包装为实现完成()方法,我称之为close() or 关闭() method?

我已经看到了完成()方法不是很流行,所以这就是为什么我问这个问题应该如何解决。

提前致谢

Juan

PS:我所看到的:

Java 有析构函数吗? https://stackoverflow.com/questions/171952/is-there-a-destructor-for-java

为什么要实现finalize()? https://stackoverflow.com/questions/158174/why-would-you-ever-implement-finalize

http://www.codeguru.com/java/tij/tij0051.shtml http://www.codeguru.com/java/tij/tij0051.shtml

通俗地解释一下Java中的close()方法 https://stackoverflow.com/questions/7118603/explain-the-close-method-in-java-in-laymans-terms

我是否需要关闭执行 File.getName() 的文件? https://stackoverflow.com/questions/8211760/do-i-need-to-close-files-i-perform-file-getname-on


大多数类都会清理其外部资源finalize方法,但这与 C++ 的析构函数不同 - 一旦不再使用对象,就会调用析构函数,但直到对象被垃圾收集时才会调用终结器,并且您不知道什么时候会发生这种情况将会发生(如果您没有内存密集型程序,它可能永远不会发生)。假设您正在分配一堆对象,每个对象都分配一个数据库连接(是的,您应该使用连接池,但这是一个假设);您使用每个对象,然后将其引用清空,以便可以在不首先关闭其数据库连接的情况下对其进行垃圾收集,现在您的数据库将会因为打开了太多连接而崩溃。您可以致电System.gc希望这将清理连接,但这只是对垃圾收集器执行收集的建议,并且垃圾数据库连接的终结器可能不够智能,无法完全清理连接。

长话短说,你需要打电话close and shutdown因为您不知道对象的终结器是否/何时运行,并且您不知道它们在清理外部资源方面有多好。

顺便说一句,您应该使用 try-catch-finally 块来确保调用close and shutdown- 将方法放在finally 块中。或者,如果您使用的是 Java7,请使用 try-with-resources。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么需要调用 close() 或 shutdown() 方法? 的相关文章

  • 为什么 JavaFX API 不包含在 Java 8 J2SE 中? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有谁知道为什么 JavaFX 8 仍然不是即将推出的 Java 8 中的日常 J2SE API 显示所有 Java 组件的技术图清楚地将 Jav
  • 如何消除 Java BoxLayout 中的间距?

    I programmed following ListPanel 使用 JavaScriptBoxLayout public class ListPanel extends JPanel private ArrayList
  • Amazon Elasticache Redis 集群 - 无法获取端点

    我需要获取 Amazon Elasticache 中 Redis 集群的终端节点 以下代码适用于 Memcached 集群 但不适用于 Redis import com amazonaws auth AWSCredentials impor
  • 在 Eclipse 中隐藏重复的工具栏项

    我不知道如何 但我的 STS 有重复的工具栏项目 我不知道如何删除它们 这是我复制的工具栏的样子 我想摆脱这些 我试图隐藏工具栏 但这没有帮助 有人知道如何删除重复的吗 自从升级到 Oxygen 以来 我一直遇到同样的问题 我无法可靠地重现
  • 最终字段可能尚未/已经初始化[重复]

    这个问题在这里已经有答案了 可能的重复 如何处理抛出检查异常的静态最终字段初始值设定项 https stackoverflow com questions 1866770 how to handle a static final field
  • HttpSession 内的同步是否可行?

    UPDATE 问题后立即解决 问题 通常 同步是在 JVM 内序列化并行请求 例如 private static final Object LOCK new Object public void doSomething synchroniz
  • Apache Commons VFS - 无法解析文件

    VFS 方法无法处理此 URI jboss server temp dir local outgoing配置在jboss beans xml这是决心 C Download jboss eap 5 1 1 server default tmp
  • 外部实体更改后索引不更新

    我目前正在开发一个项目 使用 JPA 2 1 保存数据并使用 hibernate search 4 5 0 final 搜索实体 映射类和索引后 搜索工作正常 但是 当我更改值时描述B 类从 someStr 到 anotherStr 数据库
  • 如何使用 Swipe 视图实现 Android TabLayout 设计支持库

    我将使用 android TabLayout 设计支持库 但我不知道如何使用滑动视图 这是我的代码 XML
  • java 中的 Try-with-resources 和 return 语句

    我想知道是否放一个return里面的声明尝试资源block 防止资源自动关闭 try Connection conn return conn createStatement execute 如果我写这样的东西将会联系被关闭 Oracle 文
  • JPA 的 Hibernate 查询提示

    我一直在尝试为所有可以通过设置的提示找到一个明确的资源Query setHint String Object JPA 中的方法调用 但我一无所获 有人知道一个好的参考吗 See 3 4 1 7 查询提示 http docs jboss or
  • 默认情况下,JSF 生成不可用的 ID,这些 ID 与 Web 标准的 CSS 部分不兼容

    活跃的 JSF 或 Primefaces 用户能否解释一下为什么默认情况下会发生这种情况 为什么没有人对此采取任何措施
  • java中的第三个布尔状态是什么?

    虽然我知道根据定义 布尔值仅包含两种状态 真或假 我想知道布尔值在用这些状态之一初始化之前有什么值 它默认为 false http java sun com docs books tutorial java nutsandbolts dat
  • 如何在启用嵌入时间戳和 LTV 的情况下签署 PDF?

    我正在尝试签署启用了时间戳和 LTV 的 pdf 以便它在 Adob e Reader 中显示如下 在英语中 这意味着 签名包含嵌入的时间戳 和 签名启用了 LTV 这是我正在使用的代码 PrivateKey pk get pk from
  • 应用程序中空指针异常[重复]

    这个问题在这里已经有答案了 我正在尝试在我的应用程序中实施应用程序内计费 我写了这段代码 public class Settings extends PreferenceFragment ServiceConnection mService
  • 将 PropertyPlaceholderConfigurer 中的所有属性注入到 bean 中

    我有一个PropertyPlaceholderConfigurer加载多个属性文件 我想通过配置 XML 将合并的属性映射注入到 Spring Bean 中 我可以这样做以及如何做 您只需创建一个属性 bean 并将其用于您的Propert
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 使用 Commons 或 Guava 将文本文件转换为 Java Set

    我想将文件中的每一行加载到 HashSet 集合中 有没有一种简单的方法可以做到这一点 怎么样 Sets newHashSet Files readLines file charSet 使用番石榴 参考 文件 readLines http
  • 如何在apache POI中读取excel文件的准确单元格内容

    当我读取单元格的内容时 例如如果它是日期格式 它会转换为另一个值 例如 12 31 2099 gt 46052 和 50 00 gt 50 和 50 00 gt 0 5 但我想要的是获取每个单元格的确切字符串值 我的代码是这样的 cell
  • Swing:创建可拖动组件...?

    我在网上搜索了可拖动 Swing 组件的示例 但我发现示例不完整或不起作用 我需要的是一个摇摆组件那可以是dragged通过鼠标 在另一个组件内 被拖拽的时候 应该已经 改变它的位置 而不仅仅是 跳 到目的地 我很欣赏无需非标准 API 即

随机推荐