검사, 비검사 예외에 똑같이 적용됨. 예측할 수 있는 예외 상황이든 프로그래밍 오류든, 빈 catch 블록으로 못 본 척 지나가면 그 프로그램은 오류를 내재한 채 동작하게 된다.
그러다 어느 순간 문제의 원인과 아무 상관없는 곳에서 갑자기 죽어버릴 수 있음.
예외를 적절히 처리하면 오류를 완전히 피할 수도 있다
무시하지 않고 바깥으로 전파되게만 놔둬도 최소한 디버깅 정보를 남긴 채 프로그램이 신속히 중단되게는 할 수 있다
try { ... } catch (SomeException e) { }
- 예외를 무시해야 할 때도 있긴 함
- (입력 전용 스트림이므로) 파일의 상태를 변경하지 않았으니 복구할 것이 없으며, (스트림을 닫는다는 건) 필요한 정보를 이미 다 읽었다는 뜻이니 남은 작업을 중단할 이유도 없다
- 혹시 같은 예외가 자주 발생한다면 조사해보는 것이 좋을 테니 파일을 닫지 못했다는 사실을 로그로 남기는 것도 좋은 생각
예를 들어 FileInputStream을 닫을 때가 그렇다.
- 예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꿔놓도록 하자
Future<Integer> f = exec.submit(planarMap::chromaticNumber); int numColors = 4; try { numColors = f.get(1L, TimeUnit.SECONDS); } catch (TimeoutException | ExecutionException ignored) { // 기본값을 사용한다 (색상 수를 최소화하면 좋지만, 필수는 아니다). }