Ответ: "это зависит".
Если этот код является частью самого приложения, то, возможно, лучшим вариантом является вызов System.exit(int)
. (Но если приложение «не работает», тогда вы должны позвонить exit
с ненулевым кодом возврата. Zero обычно означает «с успехом».)
Однако, если есть значительная вероятность того, что этот код будет встроенный/повторно используемый в более крупном приложении Java, вызывает System.exit(...)
. Например, библиотека, вызывающая System.exit(...)
, когда произойдет что-то плохое, приведет к хаосу для приложения, которое его использует.
Для чего-то подобного, вы можете бросить пользовательское исключение времени выполнения, которое вы поймаете и обработаете именно в вашем методе main
. (Если бы я это делал, я передал бы Exception
в качестве параметра конструктора в специальное исключение ... и сделал бы исключение cause
. И я бы не печатал его/записывал в эту точку.)
(вызов System.exit(...)
также вызывает проблемы, когда вы модульное тестирование ... «потому что вызов будет, скорее всего, махнуть на JVM работает тестовый набор!)
другое дело, что catch (Exception ...)
почти всегда ПЛОХАЯ ИДЕЯ. Дело в том, что это улавливает почти все (включая всевозможные вещи, о которых вы никогда не мечтали, может случиться!) И зарывает их. Намного лучше поймать конкретные исключения, которые вы ожидаете (например, проверенные исключения), и можете иметь дело с ... и просто позволить остальным распространяться обычным способом.
Если вы застряли в catch (Exception ...)
, потому что используете то, что объявлено как метание Exception
, лучший способ справиться с этим - изменить throws Exception
. И чем раньше, тем лучше. Измените throws Exception
, чтобы объявить список (более) конкретных исключений, которые вы ожидаете от метода.