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

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

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

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

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

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

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

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

  • System.exit(int status) – эквивалент Runtime.getRuntime().exit(status)
  • Runtime.exit(int status)Runtime.exit(int status) работу текущей запущенной JVM, инициируя ее последовательность выключения (запустив все зарегистрированные завершающие крючки и неинвизированные финализаторы , если необходимо). Как только это будет сделано, JVM остановится.
  • Runtime.halt(int status) – принудительно завершает работу запущенной JVM.

Из трех, System.exit() является обычным и наиболее удобным способом для завершения JVM.

Это интересная дискуссия о velocityreviews по той же теме:

Блики:

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

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

написано

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

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

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

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

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

  • отображение AM и PM в маленькой букве после форматирования даты
  • Чтение / запись файла .txt со специальными символами
  • Неустранимая ошибка: неверный макет java.lang.String по значению
  • Сравнение содержимого StringBuffer с равными
  • Речь в текст на Android
  • Firebase DatabaseException: Не удалось преобразовать значение типа java.lang.Long в String
  • Как сохранить разрешение в API API 19 (KitKat)?
  • Как разобрать stream ввода JSON
  • Передача пользовательских объектов между действиями?
  • Как рассчитать разницу во времени в java?
  • Как сохранить изображение в формате JPEG на Android с пользовательским уровнем качества
  • Interesting Posts

    Как группировать по неделям в MySQL?

    Как разрешать символические ссылки в сценарии оболочки

    VIMRC, SCREENRC, BASHRC, KSHRC и т. Д. Что означает «RC»?

    Преобразование файлов MP4, AVI, MOV в коллекцию PNG, JPG или GIF кадров

    Сохранять p: диалог открывается, когда возникает ошибка проверки после отправки

    Как удалить большое количество записей из истории url в Firefox?

    jQuery выбрать все, кроме первого

    Что означает `..` в ссылках на git?

    @GeneratedValue полиморфный абстрактный суперclass над MySQL

    WChars, кодировки, стандарты и переносимость

    Как программно создать новый VPN-интерфейс с Android 4.0?

    Как определить, является ли текущая версия Windows 32-разрядной или 64-разрядной из командной строки?

    Преобразовать учетную запись Gmail из POP в IMAP и сохранить структуру папок?

    Как выбрать несколько файлов с помощью элемента управления загрузкой файлов?

    Лучше ли вызывать ToList () или ToArray () в запросах LINQ?

    Давайте будем гением компьютера.