Мне известны головные боли, связанные с возвратом в блоки try / catch / finally - случаи, когда возвращение в finally всегда является возвратом для метода, даже если возврат в блоке try или catch должен быть выполнен.
Однако применимо ли то же самое к System.exit ()? Например, если у меня есть блок попыток:
try {
//Code
System.exit(0)
}
catch (Exception ex) {
//Log the exception
}
finally {
System.exit(1)
}
Если нет исключений, какой System.exit () будет вызываться? Если бы выход был оператором возврата, то всегда (?) Вызывалась бы строка System.exit (1). Однако я не уверен, что exit ведет себя иначе, чем return.
Код находится в крайнем случае, который очень сложно, если не невозможно, воспроизвести, поэтому я не могу написать модульный тест. Я собираюсь попробовать провести эксперимент позже сегодня, если у меня будет несколько свободных минут, но мне все равно любопытно, и, возможно, кто-то из SO знает ответ и может предоставить его раньше или в случае, если я не могу запустить эксперимент.
throw new Exception("Error");
прямо передSystem.exit(0)
, затем скомпилируйте и посмотрите, какой код состояния возвращает ваш исполняемый файл. - person Ki Jéy   schedule 01.09.2017