为什么要实现finalize()?

2024-04-09

我已经阅读了很多 Java 新手问题finalize()令人困惑的是,没有人真正明确表示 Finalize() 是一种不可靠的清理资源的方法。我看到有人评论说他们用它来清理连接,这真的很可怕,因为接近保证连接关闭的唯一方法是最后实现 try (catch)。

我没有接受过 CS 教育,但我已经用 Java 专业编程近十年了,而且我从未见过有人实现过finalize()在生产系统中。这仍然并不意味着它没有用处,也不意味着与我共事的人一直在做正确的事情。

所以我的问题是,有哪些用例可以实现finalize()无法通过语言中的另一个过程或语法更可靠地处理?

请提供具体的场景或您的经验,简单地重复Java教科书,或最终确定的预期用途是不够的,因为不是这个问题的意图。


您可以将其用作持有外部资源(套接字、文件等)的对象的后盾。实施一个close()需要调用的方法和文档。

实施finalize()close()如果您发现尚未完成,则进行处理。也许有东西倾倒到stderr指出您正在清理一个有问题的来电者。

它在特殊/有缺陷的情况下提供额外的安全性。并非每个来电者都会做正确的事情try {} finally {}每次都有东西。不幸的是,但在大多数环境下都是如此。

我同意很少需要它。正如评论者所指出的,它会带来 GC 开销。仅当您在长时间运行的应用程序中需要“腰带和吊带”安全时才使用。

我看到从 Java 9 开始,Object.finalize() https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html#finalize--已弃用!他们向我们指出java.lang.ref.Cleaner https://docs.oracle.com/javase/9/docs/api/java/lang/ref/Cleaner.html and java.lang.ref.PhantomReference https://docs.oracle.com/javase/9/docs/api/java/lang/ref/PhantomReference.html作为替代方案。

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

为什么要实现finalize()? 的相关文章

  • 我是否需要安装 SQLite 才能使 SQLiteJDBC 正常工作?

    我想我只是没有 明白 如果我的计算机上尚未安装 SQLite 并且我想编写一个使用嵌入式数据库的 Java 应用程序 并且我将 SQLiteJDBC JAR 下载 导入到我的项目中 那么这就是我所需要的吗 或者 我是否需要先安装 SQLit
  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • 如何在java中将数组值排序为循环格式?

    我的数组值如下 String value 1 2 3 4 5 6 7 8 9 10 假设如果我将值 5 传递给 tat 数组 它应该按如下顺序排序 5 6 7 8 9 10 1 2 3 4 怎么办 有人帮忙吗 感谢你 你需要的就是所谓的轮换
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 断言 Kafka 发送有效

    我正在使用 Spring Boot 编写一个应用程序 因此要写信给 Kafka 我这样做 Autowired private KafkaTemplate
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML
  • 在java中以原子方式获取多个锁

    我有以下代码 注意 为了可读性 我尽可能简化了代码 如果我忘记了任何关键部分 请告诉我 public class User private Relations relations public User relations new Rela
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • C# 中的 IIF 是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 c 中的 iif 等效项 https stackoverflow com questions 822810 iif equivalent in c 我有几行代码使用IIf在 VB 中 我正在尝试将此代
  • 具有 Maven 依赖的 Java ClassNotFoundException

    我正进入 状态ClassNotFoundException and NoClassDefFoundError当我尝试使用 Maven 定义的依赖项运行我的应用程序时出现异常 我将相关 jar 的 Maven 依赖项添加到了我的pom xml
  • 如何向 NextRequest 类型添加新属性?

    我正在创建一个向 NextRequest 添加 name 属性的中间件 该属性将在 API 的其他部分中使用 import NextRequest NextResponse from next server export function
  • Spring 3.1.1和Cache配置问题

    我正在测试 Spring 缓存 这是我的上下文文件
  • Laravel 属于关系

    好吧 我对模型的 belongsTo 关系有点困惑 我有一个扩展 Elogent 的 Feeds 模型 我创建了一个名为 User 的关系函数 public function user return this gt belongsTo Us
  • 如何使用Matplotlib在图形中间绘制轴

    我想画一条平行于 y 轴且位于 x 轴中间的静态垂直线 当图中平移时 这条线不应移动 我的目标是让图形中间的这条垂直线作为参考线 我将有一些其他数字 它们表示取决于 x 轴中间的 x 值的数据 该线的端点坐标在轴坐标中为 0 5 0 和 0
  • Python API从密钥服务器获取PGP公钥?

    有没有可以从公钥服务器获取 PGP 公钥的 Python API 如果您正在查询 MIT PGP 密钥服务器 您可以使用 HTTP 我选择 urllib2 和 beautiful soup http pgp mit edu extracth
  • 即使应用程序在线,也要先查询Firestore离线数据[重复]

    这个问题在这里已经有答案了 即使应用程序在线 就像我们在 Firebase 实时数据库中所做的那样 如何首先检索 查询 Firestore 离线数据 谁能帮我解决 Android 版的这个问题吗 Thanks Satish 当您连接到服务器
  • Crystal Reports XI 中正确的 ISO 周编号

    如何在 Crystal Reports XI 中获取给定日期的 ISO 8601 周数 水晶报表支持DatePart 可以为您提供给定日期的 ISO 周数的函数 NumberVar week DatePart ww date crMonda
  • 将附加模板添加到右侧边栏 magento

    我只是尝试添加额外的模板文件以在右侧栏中包含内容块 但失败了 下面是我的努力 添加到 local xml 文件中
  • 如何将文本附加到android中的edittext中?

    在我的应用程序中 我想为用户提供从列表中选择文本并附加到编辑文本中的方法 但是我找不到任何有关如何执行此操作的文档 任何帮助都会有很大帮助 谢谢 只需使用 EditText 的append 即可 参数将附加在可编辑内容的末尾
  • 如何在 anaconda python 中导入 OpenGL?

    我在 anaconda python 上使用 ipython 笔记本 但我不知道如何安装或导入 opengl 谁能帮我解决这个问题吗 我在 Linux xubuntu 上使用 anaconda 抱歉英语不好 正如 David 所指出的 Vi
  • 用javascript求解线性方程组[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 使用 JavaScript 求解线性方程组的最佳方法是什么 我想找到向量 r 的解决方案 M r b 其中 M 是矩阵 b 是向量 我知道
  • SMS 的 .NET 代码

    HI all 我正在编写一些代码来通过 Zeep Mobile 发送 接收短信 http zeepmobile com developers http zeepmobile com developers 我查看了他们的谷歌群组 甚至联系了他
  • 如何更改另一个程序窗口的按钮文本

    我的任务是更改窗口中按钮的文本 我没有并且cannot访问源代码 因为它由我们付费订阅的公司拥有 如何在没有源代码的情况下更改按钮文本 我正在尝试使用 pInvoke 但遇到问题 窗口标题会根据您的合作对象而变化 订单输入表 姓氏 名字 因
  • JSON 反序列化抛出异常 - 无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例

    以下是我的 JSON 响应 导致 com fasterxml jackson databind JsonMappingException 无法从 START OBJECT 令牌反序列化 java util ArrayList 的实例 在 来
  • Java正则表达式 - 在空格上分割字符串 - 忽略引号中的空格和转义引号[重复]

    这个问题在这里已经有答案了 我正在寻找正则表达式来在Java中执行以下操作 String originalString String splitString originalString spilt regex 一些测试用例 Origina
  • 单击标签未打开选择

    我一直以为 点击label将或多或少地 触发 相应表单元素的点击 然而 这似乎不起作用select 选择字段上的鼠标按下 动画有效 但选择未打开 我试过这个
  • 使用 CSS,P 标签在 Firefox 中的显示位置低于在 Internet Explorer 中的显示位置

    我制作了一个在 Internet Explorer 上看起来很完美的网站 但是当用 Firefox 加载时 某些元素不对齐 例如 出现在坐标 20 20 上的 p 标签在 Firefox 中会出现在坐标 20 40 上 出于某种原因 Fir
  • 为什么要实现finalize()?

    我已经阅读了很多 Java 新手问题finalize 令人困惑的是 没有人真正明确表示 Finalize 是一种不可靠的清理资源的方法 我看到有人评论说他们用它来清理连接 这真的很可怕 因为接近保证连接关闭的唯一方法是最后实现 try ca