Как правило, в разных книгах я обнаружил, что основной метод должен быть общедоступным, потому что он должен быть видимым для загрузчика классов. Но JVM выполняет (или обеспечивает специальную обработку) различные частные методы, например, метод readObject/writeObject в ObjectOutputStream.Почему это обязательное объявлять основной метод public ... Почему JVM не может выполнить частный основной метод?
ответ
Я думаю, потому что так оно и есть, и именно так решает Java Language Specification. Я могу понять, почему они выбрали модификатор общедоступного доступа, поскольку вы вызываете Java-программу извне класса (через командную строку), чтобы он соответствовал системе управления доступом Java, что основной метод должен быть общедоступным.
Если основным методом было разрешено быть закрытым, но тогда вы должны вызвать его из другого места, например. java, что противоречит модификаторам доступа Java. Было бы непоследовательным поведением, независимо от того, насколько это технически возможно.
частные методы могут быть вызваны из использования отражения ... поэтому я не думаю, что объявление основного как частного нарушает любые фундаментальные ... – Ashish
@user (long number) - может быть SecurityManager, и только потому, что это технически возможно, это не значит, что это правильная вещь или правильный дизайн. – planetjones
«Если главное ... технически возможно». << на этот комментарий Я хочу сказать, что это не будет непоследовательным поведением. На вашем последнем комментарии я согласен с вами в том, что это может быть плохой дизайн. Но я хочу знать помимо всего этого ... может ли быть большая проблема, объявив метод private? – Ashish
Совершенно очевидно, что точка входа вашей программы должна быть видимой.
Не обязательно объявлять main() как общедоступные. Мы также можем объявить его закрытым. Когда метод объявлен как закрытый, программа компилируется правильно, но это приведет к ошибке выполнения. Основной метод не является общедоступным
Но если вы объявите основной метод как закрытый, вы не сможете выполнять этот класс как отдельную java-программу. Любой класс java, который должен быть выполнен как отдельный файл, должен иметь основной метод public, static и возвращает пустоту. В противном случае компилятор Java не распознал бы файл как исполняемый автономный java-файл и не разрешил бы его запускать.
class A
{
int x=7;
void show(){
System.out.println(x);
}
}
class Test
{
private static void main(String args[])
{
A a = new A();
a.show();
}
}
покажет сообщение об ошибке
Main method not public
- 1. Почему основной метод не распространяется?
- 2. Почему основной метод программы статичен?
- 3. Почему мой основной метод работает?
- 4. Почему основной метод отмечен как открытый?
- 5. Почему основной метод не преобразовывается в поток демона в java
- 6. Каков основной метод?
- 7. Почему основной метод в Java всегда статичен?
- 8. Основной метод не нашел
- 9. можно перегрузить основной метод?
- 10. это неправильно вызвать метод за пределами основной()
- 11. не может запустить мой основной метод java
- 12. Как использовать основной метод?
- 13. Почему Java public API имеет закрытый метод?
- 14. Почему моя программа не заканчивается, когда основной метод?
- 15. Основной метод пустой?
- 16. Почему мой основной класс не запускает метод, который я назвал?
- 17. Любопытно, почему мой основной метод не будет печатать мой массив
- 18. Yahtzee Game Основной метод
- 19. выполнить метод в ЦМД без основной функции
- 20. Почему основной член интерфейса не должен объявлять себя новым?
- 21. Основной метод не найден Ошибка
- 22. Почему внутренний класс может переопределять частный конечный метод?
- 23. метод, вызванный извне Основной метод не выполнен
- 24. Нет основной метод не обнаружен
- 25. Почему javafxpackager не может загрузить основной класс?
- 26. Eclipse не находит основной метод
- 27. Как выполнить основной метод в терминале?
- 28. Переопределение основной метод
- 29. Почему Whitebox не признает мой частный метод?
- 30. VB.net Основной метод не выполняется
какая польза будет ли за то, что особый случай для видимости 'main'? Зачем вам нужен «частный» или защищенный «главный»? – Mat
JVM не имеет специальной обработки для вызова частных методов вне класса. Методы, которые вы назвали, являются общедоступными. Единственный способ обойти модель видимости - использовать отражение, но это нужно, потому что цель состоит в том, чтобы глубже понять объекты. –
@Mat Я просто хочу знать, почему часть и какое мышление могли быть при определении спецификации, поэтому я хочу знать эту причину, кроме сохранения простой простоты. – Ashish