System exit 0 java что это
A Guide to System.exit()
Last modified: August 27, 2021
The Price of all “Learn Spring” course packages will increase by $40 at the end of this week:
1. Overview
In this tutorial, we’ll have a look at what System.exit means in Java.
We’ll see its purposes, where to use and how to use it. We’ll also see what’s the difference in invoking it with different status codes.
2. What Is System.exit?
System.exit is a void method. It takes an exit code, which it passes on to the calling script or program.
Exiting with a code of zero means a normal exit:
We can pass any integer as an argument to the method. A non-zero status code is considered as an abnormal exit.
Calling the System.exit method terminates the currently running JVM and exits the program. This method does not return normally.
This means that the subsequent code after the System.exit is effectively unreachable and yet, the compiler does not know about it.
It’s not a good idea to shut down a program with System.exit(0). It gives us the same result of exiting from the main method and also stops the subsequent lines from executing, also the thread invoking System.exit blocks until the JVM terminates. If a shutdown hook submits a task to this thread, it leads to a deadlock.
3. Why Do We Need It?
The typical use-case for System.exit is when there is an abnormal condition and we need to exit the program immediately.
Also, if we have to terminate the program from a place other than the main method, System.exit is one way of achieving it.
4. When Do We Need It?
It’s common for a script to rely on the exit codes of commands it invokes. If such a command is a Java application, then System.exit is handy for sending this exit code.
For example, instead of throwing an exception, we can return an abnormal exit code that can then be interpreted by the calling script.
Or, we can use System.exit to invoke any shutdown hooks we’ve registered. These hooks can be set to clean up the resources held and exit safely from other non-daemon threads.
5. A Simple Example
In this example, we try to read a file and if it exists, we print a line from it. If the file does not exist, we exit the program with System.exit from the catch block.
Here, we must note that the finally block does not get executed if the file is not found. Because the System.exit on the catch blocks exits the JVM and does not allow the finally block to execute.
6. Choosing a Status Code
We can pass any integer as a status code but, the general practice is that a System.exit with status code 0 is normal and others are abnormal exits.
Note that this is only a “good practice” and is not a strict rule that the compiler would care about.
Also, it’s worth noting when we invoke a Java program from the command-line that the status code is taken into account.
In the below example, when we try to execute SystemExitExample.class, if it exits the JVM by calling the System.exit with a non-zero status code, then the following echo does not get printed.
To make our program able to communicate with other standard tools, we might consider following the standard codes that the related systems use to communicate.
Exit Codes With Special Meanings document prepared by The Linux Documentation Project presents a list of reserved codes. It also advises on what codes to use for specific scenarios.
7. Conclusion
In this tutorial, we discussed how System.exit works when to use it, and how to use it.
It’s a good practice to use exception handling or plain return statements to exit a program when working with application servers and other regular applications. Usage of System.exit method suit better for script-based applications or wherever the status codes are interpreted.
You can check out the examples provided in this article over on GitHub.
System.exit() в Java – что это?
Java – язык программирования, имеющий множество приложений. При программировании для одного из этих приложений вы можете застрять на каком-то этапе этой программы. Что делать в этой ситуации? Есть ли способ выйти в этой самой точке? Если эти вопросы вас беспокоят, вы попали в нужное место.
Что вы можете сделать, это просто использовать метод System.exit(), который завершает текущую виртуальную машину Java, работающую в системе.
Как вы выходите из функции в Java?
Вы можете выйти из функции, используя метод java.lang.System.exit(). Этот метод завершает текущую запущенную виртуальную машину Java (JVM). Он принимает аргумент «код состояния», где ненулевой код состояния указывает на ненормальное завершение.
Если вы работаете с циклами Java или операторами switch, вы можете использовать операторы break, которые используются для прерывания / выхода только из цикла, а не всей программы.
Что такое метод System.exit()?
Метод System.exit() вызывает метод exit в классе Runtime. Это выходит из текущей программы, завершая виртуальную машину Java. Как определяет имя метода, метод exit() никогда ничего не возвращает.
Вызов System.exit (n) фактически эквивалентен вызову:
Функция System.exit имеет код состояния, который сообщает о завершении, например:
Исключение: выдает исключение SecurityException.
Примеры
Выход: arr [0] = 1 arr [1] = 2 arr [2] = 3 Выход из цикла
Объяснение: В приведенной выше программе выполнение останавливается или выходит из цикла, как только он сталкивается с методом System.exit(). Он даже не печатает второй оператор печати, который говорит «Конец программы». Он просто завершает программу сам.
Вывод: array [0] = 1 array [1] = 2 array [2] = 3 array [3] = 4 Выход из цикла
Объяснение: В приведенной выше программе она печатает элементы до тех пор, пока условие не станет истинным. Как только условие становится ложным, оно печатает оператор и программа завершается.
Руководство по системе.()
Узнайте, как и когда использовать функцию Java System.exit ().
1. Обзор
В этом уроке мы рассмотрим, что означает System.exit в Java.
Мы увидим его назначение, где и как его использовать. Мы также увидим, в чем разница в вызове его с разными кодами состояния.
2. Что Такое System.exit?
Выход с кодом ноль означает нормальный выход:
Мы можем передать любое целое число в качестве аргумента методу. Ненулевой код состояния считается ненормальным выходом.
Вызов метода System.exit завершает работу текущей JVM и завершает работу программы. Этот метод не возвращается нормально.
Это означает, что последующий код после System.exit фактически недоступен и все же компилятор не знает об этом.
3. Зачем Нам Это Нужно?
Кроме того, если мы должны завершить программу из места, отличного от основного метода, System.exit является одним из способов достижения этого.
4. Когда Нам Это Нужно?
Обычно сценарий полагается на коды выхода команд, которые он вызывает. Если такая команда является Java-приложением, то System.exit удобен для отправки этого кода выхода.
Например, вместо того, чтобы создавать исключение, мы можем вернуть ненормальный код выхода, который затем может быть интерпретирован вызывающим скриптом.
5. Простой Пример
В этом примере мы пытаемся прочитать файл и, если он существует, выводим из него строку. Если файл не существует, мы выходим из программы с помощью System.exit из блока catch.
6. Выбор кода состояния
Мы можем передать любое целое число в качестве кода состояния, но общая практика такова, что System.exit с кодом состояния 0 является нормальным, а другие-ненормальными выходами.
Обратите внимание, что это всего лишь “хорошая практика” и не является строгим правилом, о котором будет заботиться компилятор.
Кроме того, стоит отметить, что при вызове Java-программы из командной строки учитывается код состояния.
В приведенном ниже примере, когда мы пытаемся выполнить SystemExitExample.class, если он выходит из JVM, вызывая System.exit с ненулевым кодом состояния, то следующее эхо не печатается.
Чтобы сделать нашу программу способной взаимодействовать с другими стандартными инструментами, мы могли бы рассмотреть возможность следования стандартным кодам, используемым соответствующими системами для связи.
Например, коды состояния UNIX определяют 128 как стандарт для “недопустимого аргумента для выхода”. Поэтому было бы неплохо использовать этот код, когда нам нужно, чтобы наш код состояния был передан операционной системе. В противном случае мы вольны выбирать свой код.
7. Заключение
Рекомендуется использовать обработку исключений или простые операторы return для выхода из программы при работе с серверами приложений и другими обычными приложениями. Использование метода System.exit лучше подходит для скриптовых приложений или везде, где интерпретируются коды состояния.
System.exit(). Какой код выхода использовать?
Что является причиной того, что java программа прекращает любую свою активность и завершает свое выполнение? Основных причин может быть 2 (JLS Секция 12.8):
Именно значение 0 и возвращает JVM в первом, вышеописанном случае при своем завершении.
Как это можно проверить?
Тут нам на помощь приходит параметр командной строки ERRORLEVEL, который позволяет получить код выхода программы, которую мы запускали последней.
Как видим со скриншота код выхода равен 0.
Переходим ко второму случаю, с использованием метода exit().
Какие значения можно передавать в метод exit? Исходя из документации:
The argument serves as a status code; by convention, a nonzero status code indicates abnormal termination.
Ага, варианта два: либо 0, либо любое ненулевое значение. Второй вариант можем разбить еще на два под варианта: любое отрицательное число и любое положительное число типа int.
Итак, пробуем вариант с 0:
Как видим, родительский процесс снова получил информацию об успешном завершении JVM.
А что же с nonzero значениями? Что, когда и в каком случае передавать?
Тут все просто — никаких требований для nonzero значений нету и следует руководствоваться лишь одним общим правилом:
Когда мы должны позвонить в систему.выход на Java
в Java, какая разница с или без System.exit(0) в следующем коде?
The документ говорит: «Этот метод никогда не возвращает.»Что это значит?
10 ответов:
«этот метод никогда не возвращает.» означает только, что метод не вернется; как только поток идет туда, он не вернется.
другой, возможно более распространенный, способ выйти из программы-это просто дойти до конца main метод. Но если есть какие-либо не-демонические потоки, они не будут закрыты, и поэтому JVM не выйдет. Таким образом, если у вас есть такие не-демонические потоки, вам нужны некоторые другие средства (кроме крючков выключения), чтобы закрыть все не-демонические потоки и освободить другие ресурсы. Если нет другие не-демонические потоки, возвращающиеся из main выключит JVM и вызовет крючки выключения.
по какой-то причине крючки выключения кажутся недооцененным и непонятым механизмом, и люди изобретают колесо со всеми видами проприетарных пользовательских хаков, чтобы выйти из своих программ. Я бы рекомендовал использовать крючки выключения; все это есть в стандарте Runtime что вы будете использовать в любом случае.
когда документы говорят, что метод никогда не возвращается нормально, это означает, что следующая строка кода эффективно недоступно, хотя компилятор этого не знает:
либо будет выдано исключение, либо виртуальная машина завершится перед возвратом. Это никогда не будет » просто возвращать.»
очень редко стоит вызов System.exit() IME. Это может иметь смысл, если вы пишете инструмент командной строки, и вы хотите указать ошибку с помощью кода выхода, а не просто выбрасывать исключение. но я не могу вспомнить, когда в последний раз я использовал его в обычном производственном коде.
System.exit(0) завершает работу JVM. В простых примерах, подобных этому, трудно понять разницу. Параметр передается обратно в ОС и обычно используется для указания ненормального завершения (например, какая-то фатальная ошибка), поэтому, если вы вызвали java из пакетного файла или сценария оболочки, вы сможете получить это значение и получить представление о том, было ли приложение успешным.
это будет иметь большое влияние, если вы позвонили System.exit(0) в приложении, развернутом на сервере приложений (подумайте об этом, прежде чем попробовать).
метод никогда не возвращается, потому что это конец света, и ни один из вашего кода не будет выполняться дальше.
ваше приложение, в вашем примере, будет выходить в любом случае в том же месте в коде, но, если вы используете систему.выход. у вас есть возможность вернуть пользовательский код в среду, например, скажем
кто будет использовать ваш код выхода? Сценарий, который вызвал приложение. Работает в Windows, Unix и всех других скриптах окружающая среда.
зачем возвращать код? Чтобы сказать такие вещи, как» мне не удалось»,»база данных не ответила».
чтобы узнать, как получить значение кода выхода и использовать его в сценарии оболочки unix или сценарии cmd windows, вы можете проверить этот ответ на этом сайте!—11—>
в приложениях, которые могут иметь сложные крючки выключения, этот метод не должен вызываться из неизвестного потока. System.exit никогда не выходит нормально, потому что вызов будет блокироваться до тех пор, пока JVM не будет завершен. Это как если бы любой код работает, который имеет вилку питания вытащил на него, прежде чем он может закончить. Звоню System.exit инициирует крючки выключения программы и любой поток, который вызывает System.exit блокируется до завершения программы. Это означает, что если крюк выключения свою очередь, представляет собой задачу, чтобы нить, из которой System.exit был вызван, программа будет тупик.
я обрабатываю это в своем коде следующим образом:
никогда не следует вызывать систему.выход(0).
кстати: возврат других кодов возврата, чем 0, имеет смысл, если вы хотите указать ненормальное завершение программы.
программа завершает всю свою деятельность и завершает работу, когда одна из двух вещей бывает:
все потоки, которые не являются потоками демона прекращать.
какой-то поток вызывает метод exit класса Runtime или class система, и операция выхода не запрещена менеджером безопасности.
Это означает что вы должны использовать его, когда у вас есть большая программа (ну, по крайней мере, больше, чем эта) и хотите закончить ее выполнение.
хотя ответ был очень полезным, но некоторые, как он пропустил некоторые дополнительные детали. Я надеюсь, что ниже поможет понять процесс выключения в java, в дополнение к ответу выше:
PS: JVM может закрыться в любом аккуратность или крутой порядке.
Если у вас есть другая программа, работающая в JVM, и вы используете систему.выход, эта вторая программа тоже будет закрыта. Представьте, например, что вы запускаете задание java на узле кластера и что программа java, управляющая узлом кластера, работает в той же JVM. Если задание будет использовать систему.выход из него не только завершит работу, но и «завершит работу всего узла». Вы не сможете отправить другое задание на этот узел кластера, так как программа управления была закрыта случайно.
поэтому, не используйте систему.выйдите, если вы хотите иметь возможность управлять своей программой из другой программы java в той же JVM.
Системы Использовать.выход, если вы хотите закрыть полный JVM нарочно и если вы хотите воспользоваться возможностями, которые были описаны в других ответах (например, выключить крючки:Java shutdown hook, ненулевое возвращаемое значение для командной строки: как получить статус выхода программы Java в Windows пакетный файл).
Также посмотрите на исключения времени выполнения: