Java中的finalize方法

时间:2011-03-03 02:00:49

标签: java garbage-collection

  

可能重复:
  Why is the finalize() method in java.lang.Object “protected”?

finalize方法是使用受保护的作用域定义的,那么垃圾收集器等其他对象如何能够调用它。

4 个答案:

答案 0 :(得分:7)

因为垃圾收集器是语言规范的一部分,因此可以执行语言规范所能做的任何事情。

答案 1 :(得分:2)

protected与private不同,垃圾收集器即使是私有的也可以访问它。

Why is the finalize() method in java.lang.Object "protected"?

答案 2 :(得分:1)

答案 3 :(得分:1)

从Java语言规范的角度来看,垃圾收集器不是对象,并且不受普通访问规则的约束。它是“JVM的一部分”,可以执行普通Java代码无法做到的事情。 (实际上,它可能根本不是作为Java代码实现的!)

想一想。如果要求GC符合访问规则,那么它将无法在标记阶段访问对象的private个字段,因此无法确定对象是否可访问。换句话说,它无法满足内存管理的JLS要求。