本帖最后由 结冰的离季 于 2021-8-19 22:02 编辑 
众所周知 C++ 里面有个与构造函数相对的析构函数,可以在该对象释放时运行函数内容
我想把它实现到Kotlin里面,当我查阅资料时发现Java有个finalize()方法,可以在垃圾回收时调用。
按照kt官方文档Calling Java from Kotlin | Kotlin (kotlinlang.org)
于是我写了以下方法
复制代码
但我试的时候,发现他不可靠,直接关服没反应(不算垃圾回收),Java一些教程也说过这个东西不可靠。
我知道Java没有析构这个概念,但它真的太好用了,所以我想问问有没有办法实现,或者类似的功能,
众所周知 C++ 里面有个与构造函数相对的析构函数,可以在该对象释放时运行函数内容
我想把它实现到Kotlin里面,当我查阅资料时发现Java有个finalize()方法,可以在垃圾回收时调用。
按照kt官方文档Calling Java from Kotlin | Kotlin (kotlinlang.org)
于是我写了以下方法
- protected fun finalize() = print(1)
 
但我试的时候,发现他不可靠,直接关服没反应(不算垃圾回收),Java一些教程也说过这个东西不可靠。
我知道Java没有析构这个概念,但它真的太好用了,所以我想问问有没有办法实现,或者类似的功能,
有的,finalize() 是 java.lang.Object 的 protected 方法,你需要先 @override 然后实现它
Java 不推荐使用析构函数的原因是因为完全无法预判 GC 何时回收对象,因此析构函数的调用是不确定的
如果你一定需要使用析构函数,那么则说明你的程序设计有问题(
Java 不推荐使用析构函数的原因是因为完全无法预判 GC 何时回收对象,因此析构函数的调用是不确定的
如果你一定需要使用析构函数,那么则说明你的程序设计有问题(
贺兰兰 发表于 2021-8-19 22:00
有的,finalize() 是 java.lang.Object 的 protected 方法,你需要先 @override 然后实现它
Java 不推荐使 ...
c++ java kt 同时写,人嘛了,设计出来的大杂烩= =
类似的功能
你要找的是不是AutoClose或者Closeable之类的接口
I/O Stream还有Connection之类都需要手动close 或者试试twtr
不知道"close"这个算不算类似的功能
https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html
你要找的是不是AutoClose或者Closeable之类的接口
I/O Stream还有Connection之类都需要手动close 或者试试twtr
不知道"close"这个算不算类似的功能
https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html
 本帖最后由 海螺螺 于 2021-8-19 23:26 编辑 
你需要 ReferenceQueue,jdk 会有一个包装好的 Cleaner 类;关服再处理你可能想要 shutdown hook
不要用 finalize
你需要 ReferenceQueue,jdk 会有一个包装好的 Cleaner 类;关服再处理你可能想要 shutdown hook
不要用 finalize
书上的0-0再看看
海螺螺 发表于 2021-8-19 23:22
你需要 ReferenceQueue,jdk 会有一个包装好的 Cleaner 类;关服再处理你可能想要 shutdown hook
我试了Shutdown hook 尴尬的是
 
 
这也太晚了!Bukkit的东西就操作不了了
同 1 楼贺兰,C++ 有析构函数是因为不用的对象的内存不会被释放,需要你手动 delete(即需要手动管理内存)。这一点在 Java 中并不成立:一般的 JVM GC 实现都会在发现对象闲置后把内存重新标记为可用,根本不需要你去管理内存。
因此,楼主你问出了一个 XY 问题:你到底遇到了什么需求,需要你清理对象?!
因此,楼主你问出了一个 XY 问题:你到底遇到了什么需求,需要你清理对象?!