Рубрики
Без рубрики

Руководство по системе.()

Узнайте, как и когда использовать функцию Java System.exit ().

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы рассмотрим, что означает System.exit в Java.

Мы увидим его назначение, где и как его использовать. Мы также увидим, в чем разница в вызове его с разными кодами состояния.

2. Что Такое System.exit?

System.exit – это метод void . Он принимает код выхода, который передает вызывающему скрипту или программе.

Выход с кодом ноль означает нормальный выход:

System.exit(0);

Мы можем передать любое целое число в качестве аргумента методу. Ненулевой код состояния считается ненормальным выходом.

Вызов метода System.exit завершает работу текущей JVM и завершает работу программы. Этот метод не возвращается нормально.

Это означает, что последующий код после System.exit фактически недоступен и все же компилятор не знает об этом.

System.exit(0);
System.out.println("This line is unreachable");

Не очень хорошая идея закрывать программу с помощью System.exit(0) . Это дает нам тот же результат выхода из метода main , а также останавливает выполнение последующих строк, также поток, вызывающий System.exit , блокируется до тех пор, пока JVM не завершится. Если крючок завершения работы отправляет задачу в этот поток, это приводит к тупику.

3. Зачем Нам Это Нужно?

Типичный вариант использования System.exit -это когда есть ненормальное состояние и нам нужно немедленно выйти из программы.

Кроме того, если мы должны завершить программу из места, отличного от основного метода, System.exit является одним из способов достижения этого.

4. Когда Нам Это Нужно?

Обычно сценарий полагается на коды выхода команд, которые он вызывает. Если такая команда является Java-приложением, то System.exit удобен для отправки этого кода выхода.

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

Или мы можем использовать System.exit для вызова любых крючков выключения, которые мы зарегистрировали. Эти крючки могут быть настроены для очистки удерживаемых ресурсов и безопасного выхода из других потоков, не связанных с демоном .

5. Простой Пример

В этом примере мы пытаемся прочитать файл и, если он существует, выводим из него строку. Если файл не существует, мы выходим из программы с помощью System.exit из блока catch.

try {
    BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    System.out.println(br.readLine());
    br.close();
} catch (IOException e) {
    System.exit(2);
} finally {
    System.out.println("Exiting the program");
}

Здесь мы должны отметить, что блок finally не выполняется, если файл не найден. Потому что System.exit на блоках catch выходит из JVM и не позволяет выполнить блок finally .

6. Выбор кода состояния

Мы можем передать любое целое число в качестве кода состояния, но общая практика такова, что System.exit с кодом состояния 0 является нормальным, а другие-ненормальными выходами.

Обратите внимание, что это всего лишь “хорошая практика” и не является строгим правилом, о котором будет заботиться компилятор.

Кроме того, стоит отметить, что при вызове Java-программы из командной строки учитывается код состояния.

В приведенном ниже примере, когда мы пытаемся выполнить SystemExitExample.class, если он выходит из JVM, вызывая System.exit с ненулевым кодом состояния, то следующее эхо не печатается.

java SystemExitExample && echo "I will not be printed"

Чтобы сделать нашу программу способной взаимодействовать с другими стандартными инструментами, мы могли бы рассмотреть возможность следования стандартным кодам, используемым соответствующими системами для связи.

Например, коды состояния UNIX определяют 128 как стандарт для “недопустимого аргумента для выхода”. Поэтому было бы неплохо использовать этот код, когда нам нужно, чтобы наш код состояния был передан операционной системе. В противном случае мы вольны выбирать свой код.

7. Заключение

В этом уроке мы обсудили, как работает System.exit , когда его использовать и как его использовать.

Рекомендуется использовать обработку исключений или простые операторы return для выхода из программы при работе с серверами приложений и другими обычными приложениями. Использование метода System.exit лучше подходит для скриптовых приложений или везде, где интерпретируются коды состояния.

Вы можете проверить примеры, приведенные в этой статье на GitHub .