나는 Exception의 서브 클래스를 던지는 메소드를 가지고있다. Exception 클래스의 각 하위 클래스에 대해 동일한 catch 기능을 수행하는 경우 예외 클래스를 잡는 것이 좋지 않습니까? 아니면 각 예외를 개별적으로 catch해야합니까?Exception 하위 클래스 대신 Exception 클래스를 잡는 것이 나쁜 습관입니까?
답변
네, catch 블록이 잡히면 안되는 런타임 예외를 잡아두기 때문에 좋지 않습니다. 당신이 자바 7 사용하는 경우
, 당신은 당신이 (예를 들어, 런타임 execeptions) 예기치 못한 execptions에 대한 동일한 기능을 할 수 있다면
catch (SomeException | SomeOtherException | YetAnotherException e) {
...
}
Exception
catch 블록에서 모두를 사용하여 모든 예외를 잡는 것보다 가능한 예외 (하위 클래스)를 잡는 것이 항상 좋습니다. 여기에 reference이 있습니다.
를 사용하여 코드에 의해 발생 할 수 있습니다, 그것은 괜찮습니다.
그렇지 않으면 하위 클래스를 잡는 것이 좋습니다.
코드 일부가 NullPointerException
을 던지면 어떻게 될지 생각해보십시오.
예, Exception 클래스를 잡아서 예외를 스퀠 핑하는 것은 나쁜 습관입니다. 예외는 핸들러에 문제점 보고서를 전송하도록 설계되었으며, 이렇게하면 심각한 오류를 숨길 수 있습니다.
예외적으로 의 경우에는을 처리해야합니다. 따라서 모든 예외를 처리 (catch)하는 응용 프로그램의 위치가 있기를 바랍니다. 일반적으로 이것은 완전한 응용 프로그램 충돌을 방지하기 위해 예기치 않은 예외가 발생하는 대신 사용자에게 변명의 메시지와 함께 복구 경로를 제공합니다. 일반적으로 클래스에서 예상되는 실패를 처리하고 클래스와 메서드가 호출자에게 제공하는 계약을 신뢰합니다. 예를 들어, 데이터베이스에서 ID 문자열을 사용하여 레코드를 가져 오는 방법에서는 계약서에 null ID가 허용되지 않는다고 명확하게 말할 수 있기 때문에 SQL 예외 만 잡습니다. 잘못된 입력 예외를 다시 호출자에게 던지십시오. 그렇지 않으면 잘못된 레벨에서 사용자 입력의 유효성을 검사하게 될 수 있습니다.
- 1. Exception Class를 던지거나 잡는 것은 잘못입니까? (가능한 모든 Exception)?
- 2. 클래스 내에 클래스를 포함하는 것은 나쁜 습관입니까?
- 3. JAXB에서 Exception 서브 클래스를 어떻게 직렬화합니까?
- 4. 부모 개체를 사용하여 하위 클래스를 구성하는 것은 나쁜 습관입니까?
- 5. Exception 하위 클래스를 쉽게 catch에 추가하는 방법은 무엇입니까?
- 6. Catch SOAP Exception .NET
- 7. Hibernate Exception 엔터티 클래스를 찾을 수 없다.
- 8. JAXB Unmarshal Exception
- 9. Grails/Groovy Transform Exception
- 10. java.net.MalformedURLException : 프로토콜 없음 Exception
- 11. dataSet.RejectChanges() throws exception
- 12. 이것은 나쁜 습관입니까? C++
- 13. Exception Full stacktrace
- 14. 나쁜 습관입니까?
- 15. android class path exception
- 16. ActiveSupport.remove_constant - Exception NameError
- 17. 인자없이 puts를 호출하는 것이 나쁜 습관입니까?
- 18. JavaScript에서 "const"구조를 사용하는 것이 나쁜 습관입니까?
- 19. Tomcat JDBC Exception PoolExhausted
- 20. ImageButton.setEnabled() throws Exception
- 21. Calibur.Micro의 Exception/MessageBox
- 22. Android FATAL EXCEPTION : 메인
- 23. Exception Hierarchy with C#
- 24. OutOfMemory Exception on Android
- 25. Exception use use ExecuteScalar
- 26. Sybase Exception 유형 구분
- 27. serialport exception java
- 28. 예외 throwed an exception
- 29. Spring Hibernate Exception Handling
- 30. Rogue Exception, System.InvalidOperationException, XNA
저수준의'Exception' 클래스를 잡는 것이 나쁜 이유를 이해할 수 있습니다 만, 모든 가능한 예외가 공통의 부모를 가지고 있다면 (예외는 아닙니다),'IOException '? –
@JB Nizet은 런타임 예외를 포착하지 않아야합니까? –
@ user470184 : 런타임 예외는 코드의 버그를 나타냅니다. 코드에 버그가있는 경우 메서드에서 의미있는 것을 반환하지 않기를 바랍니다. 대신, 버그를 식별하고 수정하기 위해 메소드가 빨리 실패하기를 원합니다. 예외가 있다고해서 암이 없다고 가정 해보십시오. 코드에 버그가 있고 NullPointerException을 throw하면 암에 주목하지 않겠습니까? –