可能重複:
Why is the finalize() method in java.lang.Object 「protected」?finalize方法
Finalize方法與受保護的範圍所限定,然後它是如何可能是一些其他對象,例如垃圾收集器是能夠稱之爲。
可能重複:
Why is the finalize() method in java.lang.Object 「protected」?finalize方法
Finalize方法與受保護的範圍所限定,然後它是如何可能是一些其他對象,例如垃圾收集器是能夠稱之爲。
由於垃圾收集器是語言規範的一部分,因此可以執行語言規範說明的任何操作。
protected與private不同,即使它是私有的,垃圾收集器也可以訪問它。
Why is the finalize() method in java.lang.Object "protected"?
從Java語言規範的角度來看,該垃圾收集器不是一個對象,並且不被正常訪問規則。它是「JVM的一部分」,可以執行普通Java代碼無法做到的事情。 (的確,它可能根本就沒有實現爲Java代碼!)
想一想。如果要求GC符合訪問規則,則在標記階段將無法訪問對象的字段,因此無法確定對象是否可到達。換句話說,它不能滿足JLS對內存管理的要求。
雖然GC沒有使用這種機制(它按照它自己的規則來玩),只是因爲一個方法是私有的,並不意味着即使在類之外也不能執行它,請參閱AccessibleObject.setAccessible(布爾值);這也適用於訪問領域。訪問修飾符用於控制類的正常使用。 – MeBigFatGuy