В случае языков с синтаксисом типа C мы объявляем метод main() возвращать значение int или float (или void). Можно ли объявить не-void возвращаемый тип из main() в Java? Если нет, то почему? Означает ли это, что программа Java не возвращает никакого значения ОС?Почему main() в java void?
ответ
Вы можете вернуть int с помощью System.exit().
Возвращение чего-либо, кроме целого, не имеет особого смысла, поскольку ОС ожидает целое число. Если ничего не будет возвращено, значение по умолчанию равно 0, что означает «ОК». Другие значения обычно используются для сигнализации ошибок или особых условий.
This интересное обсуждение velocityreviews
на ту же тему:
Highlight:
Кстати, это считается плохим стилем в C и C++ только потому, что это неправильно подписи для основной , а не для любой универсальной причины независимо от языков программирования. Это одна из тех вещей, которая действительно не должна работать, но может быть на вашей реализации.
В Java причина main возвращает void - это потоки. C и C++ были как , разработанными как языки, прежде чем многопоточность была широко известна в технике , и обе были перенесены на них позже. Java был разработан с самого начала, чтобы быть многопотоковой средой, и откровенно, было бы необычно написать любое нетривиальное Java-приложение , которое не использует более одного потока. Таким образом, идея о том, что программа движется линейно от начала до конца main, немного устарела.
написанный
www.designacourse.com Самый простой способ приручить Любой ... Везде. Chris Smith - ведущий разработчик программного обеспечения/Технический тренер MindIQ Корпорация
Метод main()
действительно должен иметь тип void
возврата. Из Java Language Specification на "Исполнение - Virtual Machine Start-Up" (§12.1.4):
Метод
main
должен быть объявленpublic
,static
иvoid
. Он должен принять один аргумент, который является массивом строк .
Он продолжает описывать, когда программа завершается в «Исполнение - Программа выхода» (§12.8):
Программа завершает всю свою деятельность и выходы когда одна из двух вещей происходит :
- Все нити, которые не являются Темы демона завершаются.
- Некоторые нити вызывает
exit
метод классаRuntime
или классаSystem
и операции выхода не запрещено менеджером безопасности.
Другими словами, программа может выйти до или после того, как main
метод отделки; поэтому значение возврата от main
было бы бессмысленным. Если вы хотите, чтобы программа возвращает код состояния, вызовите один из следующих методов (обратите внимание, что все три метода не возвращаются нормально):
System.exit(int status)
- ЭквивалентRuntime.getRuntime().exit(status)
Runtime.exit(int status)
- Заканчивает в настоящее время работает JVM путем запуска его последовательности выключения (запустите все зарегистрированные shutdown hooks и uninvoked finalizers, если необходимо). Как только это будет сделано, JVM остановится.Runtime.halt(int status)
- принудительно завершает работу JVM в настоящее время.
Из трех, System.exit()
является обычным и наиболее удобным способом для завершения JVM.
Причина, по которой метод main
имеет void
в качестве возвращаемого типа, заключается в том, что один раз main
заканчивается, это не обязательно означает, что вся программа завершена. Если main
порождает новые потоки, то эти потоки могут поддерживать работу программы. Тип возврата main
на данный момент не имеет смысла.
Например, это очень распространено в приложениях Swing, где метод main
обычно запускает графический интерфейс в потоке Swing, а затем main
заканчивается ... но программа все еще работает.
Питер, не могли бы вы уточнить для себя (в настоящее время изучают многопоточность java) ... Это ТОЛЬКО ДЕАНОМ, которые НЕ ДОЛЖНЫ пережить main()? – Max
@Max: no, main() метод не имеет контроля над JVM. Когда JVM запускается, он будет запускать метод main(), но когда main() заканчивается, это не означает, что JVM terminaes. JVM продолжает выполнять все потоки, пока 1) Runtime.exit() не будет вызван OR 2) все нормальные (не демона) потоки скончались. Нитки демона не учитывают это второе условие. Другими словами ... если метод main() порождает некоторые нормальные потоки, JVM будет ** не ** завершаться, когда main() заканчивается. Если main() не создает нити, JVM завершится.Если main() порождает только потоки демона, JVM также прекращается, когда main() заканчивается. –
Пит, спасибо за кладовку. – Max
- 1. Java - public static void main()
- 2. Почему C# использует неявный void Main?
- 3. Добавление Void main() wpf
- 4. C int main() vs. int main (void)
- 5. Java отвергает общедоступный статический метод void main, запросы public static void main method
- 6. Как работает int main() и void main()
- 7. Разница между «void main» и «int main»
- 8. Разница между void main и int main?
- 9. public static void main (String arg []) в java исправлен?
- 10. Что было неправильно с void main()?
- 11. Почему c разрешает main(), даже если это не int main() или void main()?
- 12. Разница между public static void main (String [] args) и public static void main (String args [])?
- 13. int main (void), давая ошибку
- 14. Void недействителен для переменной main?
- 15. Есть ли случай, когда void main (void) правильный?
- 16. Доступ к main() в public static void main (String arg [])
- 17. Почему Исключение в потоке "main" java.lang.NoSuchMethodError: main?
- 18. Почему Main() не main() в C#?
- 19. Почему статическая void Main (строка [] args) внизу этой программы?
- 20. Разница между static void main (string [] args) и static void main() в C#?
- 21. Имеет ли функция int main (void) 0?
- 22. C++ .NET эквивалент java public static void main()?
- 23. Bootstrap Weld 2.1.0 from void main
- 24. C main vs Java main
- 25. public static void main() не работает?
- 26. Чем отличается int main() и int main (void)?
- 27. Статический метод main в java
- 28. Почему нет ошибки при передаче аргументов командной строки при объявлении main как `int main (void)`?
- 29. Исключение в теме "main" java
- 30. Pass void * type to main() function
На каком языке 'main' возвращает значение с плавающей запятой? –
Как высший проголосовавший ответ на этот вопрос указывает, есть техническая причина для этого, поэтому он не основан прежде всего на мнениях. – Raedwald