Ответ
System.exit(int status) — это статический метод, который принудительно завершает работу виртуальной машины Java (JVM).
Параметр status (код завершения):
- 0 — указывает на успешное (нормальное) завершение программы.
- Любое ненулевое значение (часто 1 или -1) — сигнализирует об аварийном завершении из-за ошибки.
Ключевое поведение:
- Немедленно останавливает все потоки выполнения.
- Не гарантирует вызов деструкторов (
finalize()) объектов. - Блоки
finallyи shutdown hooks выполняются. Это распространённое заблуждение.finallyвыполнится, еслиexit()вызван внутри соответствующегоtryблока. Shutdown hooks, добавленные черезRuntime.addShutdownHook(), также будут запущены.
Пример с finally и shutdown hook:
public class ExitExample {
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
System.out.println("Shutdown hook executed.");
}));
try {
System.out.println("Before exit.");
System.exit(0);
} finally {
// Этот блок ВЫПОЛНИТСЯ, так как находится в том же методе, что и exit().
System.out.println("Finally block executed.");
}
// Вывод:
// Before exit.
// Finally block executed.
// Shutdown hook executed.
}
}
Области применения:
- Консольные утилиты (CLI): Для возврата кода успеха/ошибки в операционную систему или скрипт-оболочку.
- Критические ошибки: Когда дальнейшая работа приложения невозможна (например, не удалось загрузить критическую конфигурацию).
Альтернативы (часто предпочтительнее):
- Нормальное завершение: Простое достижение конца метода
main()или возврат из него. - Исключения: Использование механизма исключений для обработки ошибок и управления потоком выполнения.