Этот вопрос уже имеет ответ здесь:
Относительно основного C/C++ () должен всегда возвращать целое число (нуль для указания на успех и ненулевой для указания на отказ). Я могу понять это, поскольку программа запущена, это становится процессом, и каждый процесс должен иметь статус выхода, который мы получаем путем выполнения $ эха? от оболочки после того, как процесс преобладает.
Теперь я не понимаю, почему основной метод, ничего не возвращает в Java? Это заставило что-нибудь делать с тем, что программа запущена на JVM, и процесс JVM является reposnsible для возврата статуса выхода?
Разъяснитесь.
Спасибо,
Roger
Если основной метод однопоточного java-приложения завершается, то приложение завершается кодом выхода 0. Если вам нужен другой код выхода, возможно, для указания ошибки, вы можете поместить
System.exit(yourNumberHere);
в любое место в коде (особенно за пределами основного метода).
Это отличается для многопоточных приложений , где для остановки JVM необходимо либо использовать System.exit
изнутри kill -9
снаружи.
Вот краткий пример, где завершение main не останавливает приложение (типичное поведение сервиса или демона):
public static void main(String args[]) {
Thread iWillSurvive = new Thread(new Runnable() {
public void run() {
while(true) {
// heat the CPU
}
}
});
iWillSurvive.start();
}
Замечание: Конечно, поток будет завершаться, когда завершается метод выполнения (или основной метод в случае основного потока). И в этом случае, когда все потоки завершат свою работу, JVM завершится с кодом выхода 0 (что возвращает нас к начальному вопросу). Надеюсь, теперь все довольны.
Вы можете просто написать Report.SetDatabaselogon («Имя пользователя», «PWD», @ «Сервер», «База данных»); Дайте в систему для входа в систему, затем окно входа в систему базы данных не появится при запуске кода.
-121--5045978- Java имеет System.exit (int)
для этой цели.
В основном, программа Java выйдет с кодом выхода 0, если поток программного потока достигает конца основного метода (примерно; он получает времен с качанием и резьбой, но это должно быть достаточно).
Если вы придерживаетесь вызова в System.exit ()
где-то (в любом месте, на самом деле) или или
Runtime.GetRuntime (). Выход ()
, который является системой . Выход ()
вызовы, затем программа заканчивается немедленно и преждевременно.
Вы можете изобразить его, как Java, неявно добавляет System.exit (0)
в самом конце основного метода, но могут быть более тонкие различия. У меня нет полных деталей отключения JVM в моей голове прямо сейчас.
Незначительное нигли - в C ++, вам не нужно ничего вернуть от Main:
int main() {
}
- это совершенно законная программа C ++ - она действует так, как если бы вы имели:
return 0;
как последний заявление в главном.
Подозреваю, что причина возврата int на Си/Си++ заключается в том, что это соглашение указывает на успешность/неудачу функции/метода/программы на этом языке.
С введением в Java исключений вместо нуля для успеха и ненулевых значений для неудачи, она использует иерархию исключений для неудач, а успех был просто тогда, когда не было брошено исключений, тем самым устраняя необходимость возврата значения.
Большинство программ, которые я пишу в наши дни, имеет некоторую форму пользовательского интерфейса и мало что они могут с пользой возвращаться, и даже реже, на скорее всего, что что-то все будет нуждаться в этом состоянии состояния.
Так зачем заставить все программы вернуть один? Как сказали другие, вы можете вернуть код состояния, если вы хотите ...
Возможно, это связано с тем, что System.exit(int exitCode)
не возвращал значения.
, разработанный, когда многопотока была уже обычной, Java сказал (по дизайну) «До свидания» к идее, что когда «главная» возвращает программу. Вот почему нет возвращаемой стоимости. Поскольку другие сказали, что используйте System.exit
, когда вы хотите выйти с Return Code.