可能重复:
Why is the finalize() method in java.lang.Object “protected”?
finalize方法是使用受保护的作用域定义的,那么垃圾收集器等其他对象如何能够调用它。
答案 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要求。