gpt4 book ai didi

java终结疑问

转载 作者:行者123 更新时间:2023-12-01 17:31:32 25 4
gpt4 key购买 nike

我有一些关于 java 最终化的问题。例如,我有一个类 FileHelper,该类与读取文件、写入文件等相关。现在我的问题是,我在 FileHelper 类中有一个方法 writeFile() 。现在如果我想关闭该文件我应该重写 Finalize() 方法并关闭文件,还是可以在 writeFile() 方法本身内关闭文件?哪一个是正确的做法?我已将 File 变量声明为成员变量。如果重写是一个坏主意,那么为什么我们要重写 Finalize() 方法呢?哪个场景?我读过很多文章,他们说要关闭系统资源,如文件、字体等。

最佳答案

最佳做法是尽快关闭文件。如果您在 FileHelper 中有静态方法(假设您的 Helper 是一堆静态“帮助器”方法),我会关闭里面的文件

static void writeFile(String fileName, String text) { // Exception 
// Open file here
// write text
// close it
}

重写 Finalize 的目的是释放非托管资源,例如文件,以防有人忘记这样做。如果有人这样使用你的助手

 FileHelper fileHelper = new FileHelper(file);
fileHelper.writeFile(text);
// forgot to fileHelper.close();

并且您已经覆盖了finalize并在GC运行时调用close(),文件将被关闭。问题:

  • 正如我之前提到的,文件应该尽快关闭(但不能更早;))
  • 它是不确定的(没有人知道 GC 何时开始)
  • 这应该仅用于防止调用者忘记关闭文件的情况

关于java终结疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10393605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com