Возможный дубликат:
Почему метод finalize () в java.lang.Object защищен?
Метод finalize определяется с защищенной областью, тогда как это возможно, что какой-либо другой объект, такой как сборщик мусора, может вызвать его.
Возможный дубликат:
Почему метод finalize () в java.lang.Object защищен?
Метод finalize определяется с защищенной областью, тогда как это возможно, что какой-либо другой объект, такой как сборщик мусора, может вызвать его.
Потому что сборщик мусора является частью спецификации языка и, таким образом, может делать все, что указано в спецификации языка.
protected - это не то же самое, что private, и сборщик мусора мог бы получить к нему доступ, даже если бы он был частным.
Почему в java.lang используется метод finalize (). Объект защищен?
Это волшебство JVM. Так же, как вызов частных методов во время сериализации
С точки зрения спецификации языка Java, сборщик мусора не является объектом и не регулируется обычными правилами доступа. Он является «частью JVM» и может делать то, чего не может делать обычный Java-код. (На самом деле, вероятно, он вообще не реализован как Java-код!)
Подумай об этом. Если бы сборщик мусора должен был соответствовать правилам доступа, он не смог бы получить доступ к private
полям объектов во время фазы отметки и, следовательно, не мог бы определить, достижимы ли объекты. Другими словами, он не сможет выполнить требования JLS для управления памятью.