2012-04-01 4 views
9

finally 절에서 try 및 catch를 작성하는 것이 좋지 않은 프로그래밍으로 간주됩니까?finally 섹션에 캐치 시도

내 메인 메서드에서 닫고 싶은 fileInputStream을 사용하고 있습니다. .close()를 finally에 넣으려고하므로 무엇이든지 닫을 것입니다. main 메소드에 던져 선언을 추가하고 싶지는 않습니다 : P

}finally{ 
     try { 
      commandFile.close(); 
     } catch (IOException e) { 
      throwException(e); 
     } 
    } 

괜찮습니까? 감사합니다

+8

있음이 확인하고 필요한 경우가 있습니다. –

+1

예외를 재현하려는 경우 try catch가 필요하지 않습니다. try catch는 필수적이지 않은 것으로 결정한 경우 (최소한 로깅하면서) 예외로 처리해야하기 때문에 필요합니다. – SJuan76

+0

System.err 및 System.exit에 무언가를 인쇄해야합니다. 그게 throwExcpetion (e) 메소드의 기능입니다. –

답변

9

마지막 메서드에서 try/catch를 필요로하는 패턴은 불행히도 Java 6에서 이전 패턴이었습니다. 나는 이것이 실제로 나쁜 습관이라고 주장하지만, Java 6에서 실제로 피할 수있는 것은 아닙니다 (Java 7은 아래 참조).

finally 블록에서 throw 된 새로운 예외가이 블록에 도달하기 전에 throw 된 예외를 무시한다는 추가 문제가 있습니다.

Java 7에서는 리소스를 닫아야하는 경우 (try/finally/try/catch 구문의 대부분의 사용 사례)에 새로운 try-with-resources 구조가 필요합니다. 또한 기본 및 보조 예외를 모두 캡처합니다.

이 구조를 사용하면 지금 이렇게 JDK 7에 가장 좋은 방법이며, 그래, 당신이 보여 코드 따라서 자바 7의 나쁜 관행

+0

저는 Java 6 만 사용해야합니다. 아직 학교에서 7 개를 승인하지 않았습니다. –