Почему main () в Java void? - PullRequest
       19

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

60 голосов
/ 12 февраля 2009

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

Ответы [ 4 ]

68 голосов
/ 12 февраля 2009

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

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

Далее описывается, когда программа выходит из «Выполнение - Выход из программы» ( §12.8 ):

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

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

Другими словами, программа может завершиться до или после завершения метода main; поэтому возвращаемое значение из main будет бессмысленным. Если вы хотите, чтобы программа возвращала код состояния, вызовите один из следующих методов (обратите внимание, что все три метода никогда не возвращаются нормально):

Из этих трех System.exit() - это обычный и наиболее удобный способ завершить работу JVM.

27 голосов
/ 12 февраля 2009

Это - интересное обсуждение на velocityreviews на ту же тему:

Выделено:

Кстати, это считается плохим стилем в C и C ++ только потому, что это неправильная подпись для главного, не по какой-либо универсальной причине не зависит от языков программирования. Это одна из тех вещей, которая на самом деле не должен работать, но может на вашей реализации.

В Java основная причина возврата void - потоки. C и C ++ были оба разработан как языки, прежде чем многопоточность была широко известна технику, и у обоих были нити, привитые к ним позже. Джава с самого начала была разработана как многопоточная среда, и честно говоря, было бы необычно писать любое нетривиальное Java-приложение который не использует более одного потока. Таким образом, идея, что программа движется линейно от начала до конца main немного устарел.

написано

www.designacourse.com Самый простой способ тренировать кого угодно ... где угодно. Крис Смит - ведущий разработчик программного обеспечения / технический тренер MindIQ Corporation

23 голосов
/ 12 февраля 2009

Причина, по которой метод main имеет void в качестве возвращаемого типа, состоит в том, что когда main завершается, это не обязательно означает, что вся программа завершилась. Если main порождает новые потоки, то эти потоки могут поддерживать выполнение программы. Тип возврата main не имеет особого смысла на этом этапе.

Например, это очень распространено в приложениях Swing, где метод main обычно запускает графический интерфейс в потоке Swing, а затем main завершается ... но программа все еще выполняется.

7 голосов
/ 12 февраля 2009

Вы можете вернуть int с помощью System.exit ().

Возвращать что-либо кроме целого числа не имеет особого смысла, поскольку ОС ожидает целое число. Если ничего не возвращено, по умолчанию 0, что означает ОК. Другие значения обычно используются для сигнализации об ошибках или особых условиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...