2013-05-11 5 views
2

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

public int myMethod throws Exception 

У меня есть еще одна функция вызывает функцию MyMethod и хава примерки поймать блок. Я выбрал исключение во время выполнения, чтобы принудительно завершить программу. Является ли это подходящим способом для завершения программы? Если я так делаю, он дважды печатает трассировку стека, а трассировка стека из RuntimeException бесполезна.

Каков предложенный способ прекращения действия программы в catch при печати полной трассировки стека.

public int callMyMethod(){ 
    try{ 
     myMethod(); 
    } 
    catch(Exception ex){ 
      ex.printStackTrace(System.out); 
      throw new RuntimeException(); 
    } 
} 

ответ

9

Ответ: "это зависит".

Если этот код является частью самого приложения, то, возможно, лучшим вариантом является вызов 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, чтобы объявить список (более) конкретных исключений, которые вы ожидаете от метода.

1
public int callMyMethod(){ 
    try{ 
     myMethod(); 
    } 
    catch(Exception ex){ 
      ex.printStackTrace(System.out); 
      System.exit(0); // terminates with exit code 0, no extra stack trace. 
    } 
} 
0

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

system.exit (0) просто закончит вашу программу, и это может создать много хаоса. Также убедитесь, что вы никогда не поймаете Exception, если вы это делаете, вы поймаете все типы исключений, которые вы также не можете обрабатывать.

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

Смежные вопросы