2015-08-04 5 views
0

Я искал ответ для метода finalize, защищенного в классе объектов, я прошел через ответ и, наконец, запутался, поскольку нашел. Для метода finalize() класса объекта было сказано, что: он не является общедоступным (или доступ по умолчанию), потому что он должен быть вызван JVM внутри, когда объект собирает мусор - он не должен быть вызван ничем другим.JVM предназначено для вызова main() и finalize(), как один, так и общедоступный, а другой защищен? Зачем?

public static void main (String arr []), это также предназначено для вызова только JVM, потому что JVM находится за пределами моего класса вне моего проекта, поэтому для доступа к этому методу с помощью JVM он должен быть общедоступным.

Это имеет смысл для JVM и main(), но метод finalize() по той же причине, что и JVM, он не может быть общедоступным.

Может кто-то, пожалуйста, сделайте это изображение понятным для меня. Заранее спасибо

+0

Нет ничего особенного в 'main()', это может быть (а иногда и есть) вызывается другим кодом. В то время как вызов финализатора вручную потенциально опасен. – biziclop

ответ

0

Ответ: Есть моменты, когда вы можете захотеть вызвать основной метод другого проекта из вашего кода Java. То же самое относится и к финализации

1

Нет причин препятствовать тому, чтобы простой Java-код вызывал метод main; на самом деле, обычно - это, вызываемый кодом рамки, который выполняет метод произвольного класса после выполнения некоторой инициализации main.

В противоположность этому, вызов finalize любого объекта является опасным и почти гарантированно нарушает инварианты объекта.

+0

Вопрос в том, почему finalize() также не может быть общедоступным? Почему причина в том, что она предназначена для вызова JVM, поэтому она защищена, так как такой JVM находится вне нашего проекта, как он может получить доступ к защищенному feild @Marko Topolnik – MAX

+0

@Max JVM может делать что угодно. 'public/protected/private' ограничивает только пользовательский код. – biziclop

+0

@biziclop Спасибо, теперь я понимаю ОП. Конечно, JVM может вызывать любой метод. Пользовательский код также может делать это, так же: над отражением. –

 Смежные вопросы

  • Нет связанных вопросов^_^