В случае языков с синтаксисом типа C мы объявляем метод main() возвращать значение int или float (или void). Можно ли объявить не-void возвращаемый тип из main() в Java? Если нет, то почему? Означает ли это, что программа Java не возвращает никакого значения ОС?
Почему main() в java void?
Ответ 1
Метод main()
должен иметь тип возврата void
. Из Спецификация языка Java в разделе "Исполнение - запуск виртуальной машины" (§12.1.4):
Метод
main
должен быть объявленpublic
,static
иvoid
. Это должно принять один аргумент, который является массив строк.
Далее описывается, когда программа выходит из "Execution - Program Exit" (§12.8):
Программа прекращает всю свою деятельность и выходит, когда одна из двух вещей происходит:
- Все потоки, которые не являются потоки демона завершаются.
- Некоторые темы вызывает метод
exit
классаRuntime
или classSystem
, и выход операция не запрещена менеджер безопасности.
Другими словами, программа может выйти до или после завершения метода main
; поэтому возвращаемое значение из main
было бы бессмысленным.
Если вы хотите, чтобы программа вернула код состояния, вызовите один из следующих методов (обратите внимание, что все три метода никогда не возвращаются нормально):
-
System.exit(int status)
- эквивалентноRuntime.getRuntime().exit(status)
-
Runtime.exit(int status)
- Завершает текущую запущенную JVM, инициировав ее последовательность выключения (запустите все зарегистрированные hookdown и uninvoked finalizers, если необходимо). Как только это будет сделано, JVM остановится. -
Runtime.halt(int status)
- принудительно завершает работу запущенной JVM.
Из трех, System.exit()
является обычным и наиболее удобным способом для завершения JVM.
Ответ 2
Это интересное обсуждение velocityreviews
по той же теме:
Highlight:
Кстати, это считается плохим стилем на C и С++ только потому, что это неправильная подпись для основного, а не для любой универсальной причины независимо от языков программирования. Это одна из тех вещей, которая на самом деле не должно работать, но может на вашей реализации.
В Java причина main возвращает void - это потоки. C и С++ были оба разработанный как языки, прежде чем многопоточность была широко известна техники, и оба они имели прививки на них позже. Ява была разработана с самого начала, чтобы быть многопоточной средой, и честно говоря, было бы необычно писать любое нетривиальное приложение Java который не использует более одного потока. Итак, идея о том, что программа движется линейно от начала до конца main немного устарел.
написанный
www.designacourse.com Самый простой способ тренировать любого... везде. Крис Смит - ведущий разработчик программного обеспечения/технический тренер Корпорация MindIQ
Ответ 3
Причиной метода main
, имеющего void
как возвращаемого типа, является то, что после завершения main
это не обязательно означает, что вся программа завершена. Если main
порождает новые потоки, то эти потоки могут поддерживать работу программы. Тип возврата main
не имеет смысла в этой точке.
Например, это очень часто встречается в приложениях Swing, где метод main
обычно запускает графический интерфейс в потоке Swing, а затем main
заканчивается... но программа все еще работает.
Ответ 4
Вы можете вернуть int с помощью System.exit().
Возвращение ничего, кроме целого, не имеет особого смысла, поскольку ОС ожидает целое число. Если ничего не будет возвращено, значение по умолчанию равно 0, что означает "ОК". Другие значения обычно используются для сигнализации ошибок или особых условий.