Альтернативы System.exit (1)

голоса
18

По разным причинам , вызывающее System.exitнеодобрение при написании приложений Java , так как я могу сообщить вызывающий процесс , что не все идет по плану?

Изменить: 1 - это standinдля любого кода ненулевым.

Задан 28/08/2008 в 17:52
источник пользователем
На других языках...                            


8 ответов

голоса
23

Использование System.exitнеодобрения , когда «приложение» действительно суб-приложение (например , сервлет, апплет) большее приложение Java (сервер): в этом случае System.exitможет остановить JVM и , следовательно , также все другие суб-приложение. В этой ситуации, выбрасывая соответствующее исключение, которое можно было бы зафиксировать и обработать в рамках приложения / сервер является лучшим вариантом.

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

Ответил 28/08/2008 d 19:25
источник пользователем

голоса
8

Я согласен с « бросить исключение » толпы. Одной из причин является то , что вызова System.exit делает код трудно использовать , если вы хотите другой код , чтобы иметь возможность использовать его. Например, если вы обнаружите, что ваш класс будет полезен из веб - приложения, или какой - то сообщение , потребляющего приложение, было бы неплохо , чтобы эти контейнеры возможность иметь дело с провалом каким - то образом. Контейнер может потребоваться повторить операцию, решили войти и игнорировать эту проблему, отправьте по электронной почте администратору и т.д.

Исключение будет ваш main()метод; это может перехватить исключение, и вызвать System.exit()с некоторым значением , которые могут быть признаны в процессе вызова или сценарий оболочки.

Ответил 28/08/2008 d 19:25
источник пользователем

голоса
3

System.exit() заблокируют, и создать тупиковую ситуацию, если поток, который инициировал его используют в выключении крючке.

Ответил 06/11/2013 d 22:28
источник пользователем

голоса
2

Политика нашей компании является то, что это нормально (даже предпочтительнее) для вызова System.exit (-1), но только в INIT) методы (. Я определенно думаю, что в два раза, прежде чем называть его во время нормального потока отбирающих программ.

Ответил 28/08/2008 d 18:03
источник пользователем

голоса
1

Я думаю, что бросать исключение, что вы должны делать, когда что-то идет не так. Таким образом, если приложение не работает как автономное приложение абонент может отреагировать на него и имеет какую-то информацию о том, что пошло не так. Кроме того, легче для отладки, потому что вы также получить лучшее представление о том, что пошло не так, когда вы увидите трассировку стека.

Одна важная вещь, чтобы отметить, что, когда исключение достигает верхнего уровня и, следовательно, приводит к тому, VM для выхода из VM возвращает код возврата 1, поэтому внешние приложения, которые используют код возврата видеть, что что-то пошло не так.

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

Ответил 29/08/2008 d 08:57
источник пользователем

голоса
1

Бросание исключений является лучшим способом для передачи информации об определенной ошибке вверх и выйти из приложения.

Ряд не говорит вам столько, сколько:

Exception at thread 'main': FileNotFoundException "The file 'foo' doesn't exist"

(Или что-то близко к этому)

Ответил 28/08/2008 d 18:05
источник пользователем

голоса
1

Это может быть опасным / проблематичным в веб-сервлетов средах также.

Бросив исключение, как правило, считается другой альтернативы.

Ответил 28/08/2008 d 17:57
источник пользователем

голоса
1

Он неодобрительно для обычных выходов. Если «не все идет по плану», то System.exit прекрасно.

Обновление: Я хотел бы добавить, что я предполагаю, что ваш «1» имеет значение, описанное где-то.

Ответил 28/08/2008 d 17:53
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more