나쁜 관행을 구성하지 않습니다 자체의 예외의 스택 트레이스를 인쇄하지만, 유일한 예외가 발생했을 때 스테이시 추적을 인쇄하는 것은 아마 여기에 문제 - 종종 그냥 스택 추적을 인쇄하는 것만으로는 충분하지 않습니다.
또한 catch
블록 에서 수행되는 모든 항목이 인 경우 적절한 예외 처리가 수행되지 않는 것으로 의심되는 경향 이 있습니다 e.printStackTrace
. 부적절한 처리는 문제가 무시되고 최악의 경우 정의되지 않거나 예기치 않은 상태로 계속 실행되는 프로그램을 의미 할 수 있습니다.
예
다음 예제를 보자.
try {
initializeState();
} catch (TheSkyIsFallingEndOfTheWorldException e) {
e.printStackTrace();
}
continueProcessingAssumingThatTheStateIsCorrect();
여기서는 초기화가 필요한 일부 처리를 계속하기 전에 초기화 처리를 수행하려고합니다.
위의 코드에서 프로그램 continueProcessingAssumingThatTheStateIsCorrect
이 문제를 일으킬 수 있는 방법으로 진행하지 못하도록 예외를 포착하고 올바르게 처리해야 합니다.
많은 경우에, e.printStackTrace()
어떤 예외가 삼켜지고 있으며 문제가 발생하지 않은 것처럼 처리가 진행될 수 있다는 표시입니다.
이것이 왜 문제가 되었습니까?
잘못된 예외 처리가 널리 보급 된 가장 큰 이유 중 하나는 Eclipse와 같은 IDE e.printStackTrace
가 예외 처리를 수행하는 코드를 자동 생성하는 방법 때문일 수 있습니다 .
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
(상기 실제 인 try-catch
자동 생성 된 처리 이클립스로 InterruptedException
하여 발생 Thread.sleep
).
대부분의 응용 프로그램에서는 스택 추적을 표준 오류로 인쇄하는 것만으로는 충분하지 않을 수 있습니다. 부적절한 예외 처리는 많은 경우 응용 프로그램이 예기치 않은 상태로 실행되어 예기치 않은 정의되지 않은 동작을 유발할 수 있습니다.