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

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

4 Solutions collect form web for “Почему main () в java void?”

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

  • Android: добавление текстового представления в линейный макет программно
  • Не удалось выполнить компиляцию: Тип программы уже присутствует: com.google.android.gms.internal.measurement.zzabn
  • Почему получение Google Directions для Android с использованием данных KML больше не работает?
  • свойство системы настройки
  • как скачать изображение с любой веб-страницы в java
  • Когда / почему вызывать System.out.flush () в Java
  • Как я могу разобрать этот JSON в Android?
  • Как обновить TextView от другого classа
  • Загрузить профиль Chrome с помощью Selenium WebDriver с помощью java
  • Countdowntimer в минутах и ​​секундах
  • Android: отправка данных> 20 байтов BLE
  • Interesting Posts

    Каковы правила автоматического сброса буфера stdout в C?

    При клонировании с помощью git bash в Windows происходит получение Fatal: UriFormatException

    Можно ли изменить кодировку по умолчанию в блокноте?

    Почему этот шаблон совпадения недоступен при использовании нелитеральных шаблонов?

    Как получить SharedPreferences из PreferenceActivity в Android?

    Как искать и заменять строку в нескольких текстовых файлах (внутри каталога) с помощью Windows CMD? Часть 2

    Как установить java 1.7 runtime на macos 10.9 mavericks?

    Двойная загрузка и виртуализация как Windows 8, так и Ubuntu

    Hashtable с многомерным ключом в C #

    Переключить вкладки с помощью Selenium WebDriver с Java

    Как безопасно удалять файлы, хранящиеся на SSD?

    WPF Image Pan, Zoom и Scroll со слоями на canvasе

    Создание статической сборки Mac OS XC

    Ошибка из памяти с помощью Bitmap

    Преимущества и недостатки ключей базы данных GUID / UUID

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