如果我有一个使用 IO 资源的类,例如磁盘平面文件、DB 或其他形式的外部资源,那么在要运行的覆盖的 finalize() 方法中关闭这些流/连接的优缺点是什么GC?我虽然这可以利用现有的 JVM GC 并减少依赖客户端调用类方法的风险,例如 closeResources() 以及编写类似意大利面条的 try-catch(嵌套的 try-catch 和 ifs 是我最不喜欢的编程结构)。
作为一个具体的例子,我有一个简单的文件读取包装器。该类是用 构造的String filePath
,它将文件读入List<String[]>
. 如果打开文件时出现问题(catch 子句),我不想BufferedReader
在多个地方关闭它,但如果文件读取正常等也关闭它。我想把它放在一个地方并且确保它始终关闭,无论对象何时获得 GC。
这种方法是一种好的做法,还是我试图在 Java 的范围内为自己提供过高水平的便利?