Подтвердить что ты не робот

Почему main() в java void?

В случае языков с синтаксисом типа C мы объявляем метод main() возвращать значение int или float (или void). Можно ли объявить не-void возвращаемый тип из main() в Java? Если нет, то почему? Означает ли это, что программа Java не возвращает никакого значения ОС?

4b9b3361

Ответ 1

Метод main() должен иметь тип возврата void. Из Спецификация языка Java в разделе "Исполнение - запуск виртуальной машины" (§12.1.4):

Метод main должен быть объявлен public, static и void. Это должно принять один аргумент, который является массив строк.

Далее описывается, когда программа выходит из "Execution - Program Exit" (§12.8):

Программа прекращает всю свою деятельность и выходит, когда одна из двух вещей происходит:

  • Все потоки, которые не являются потоки демона завершаются.
  • Некоторые темы вызывает метод exit класса Runtime или class System, и выход операция не запрещена менеджер безопасности.

Другими словами, программа может выйти до или после завершения метода 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, что означает "ОК". Другие значения обычно используются для сигнализации ошибок или особых условий.