는 동일한가요?예외 생성자 클래스
답변
두 번째 예제에서는 catch 된 예외를 무시하고 대신 내부 예외를 사용합니다. 일반적으로 첫 번째 예제에서와 같이 코딩합니다. 만약 e
의 InnerException
사용하는 두 번째 경우
catch(Exception e)
{
throw new Exception("some Exception", e);
}
, 그리고 e
에서 데이터 : 첫 번째 경우
e
)는 새로운 예외의
InnerException
는 던지고진다 분실되었습니다 :
catch(Exception e)
{
throw new Exception("some Exception", e.InnerException);
}
첫 번째 예제는 일반적으로 더 정확합니다. 다른 예외의 결과로 새 예외를 던지면 원본을 새 예외의 내부 예외로 포함해야합니다.
그러나 이것은 일반적으로 사실이 아닙니다. 은 실제 오류에 대한 다른 코드의 래핑을 취소하려는 아주 특정한 경우에 유용 할 수 있습니다.
catch (Exception ex)
{
throw;
}
가 보존 원래 스택 추적 원래 예외가 발생합니다 :
try {
// some reflection call
} catch (TargetInvocationException e) {
// Reduce the layers of data a developer has to dig through by using the real
// exception when I re-wrap
throw new MyException("some message", e.InnerException);
}
예외를 다시 던질 수있는 세 가지 방법이 있습니다.
catch (Exception ex)
{
throw ex;
}
원본 예외는 발생하지만 원래 스택 추적은 손실됩니다. 스택 추적은 이제이 행을 예외의 시작 자로 표시합니다.
catch (Exception ex)
{
throw new Exception("...", ex);
}
새로운 예외가 발생하지만, 원래 예외 새로운 예외 InnerException
로서의 스택 트레이스를 보존한다.
첫 번째 사례는 실패로 정리해야하지만 성공하지 못한 경우에 유용합니다. 두 경우 모두 정리해야 할 경우 catch 절이 아닌 finally 절을 사용합니다. 아니면 여기에 예외가 발생했음을 기록하고 발신자가 처리하도록하기 만하면됩니다.
두 번째 사례는 전혀 유용하지 않습니다. 왜 스택 추적을 숨기고 있습니까? 약간의 희귀 한 상황이 유용 할 수 있지만, 나는 아무 것도 모른다.
세 번째 경우는 단일 유형의 예외 (또는 패밀리 유형)를 반환하려는 경우에 주로 사용됩니다. 예를 들어, 텍스트 파싱 메서드이고 모든 예외 (치명적이지 않은 예외)가 예외가 발생한 텍스트의 줄 번호와 같은 추가 정보를 제공하는 ParseException (또는 기타)로 바뀌기를 원합니다.
제공 한 두 번째 예제에서 발견 된 예외는 완전히 삭제됩니다. 새로운 예외가 생성되어 원의 예외의 InnerException가이 새로운 예외의 InnerException가됩니다.중간 예외를 제거하는 것이 유용한 시나리오는 없다고 상상할 수 있습니다.
- 1. C++ catch 생성자 예외
- 2. 생성자 및 예외 발생
- 3. 예외 처리 생성자
- 4. 예외 처리 및 생성자
- 5. 정적 생성자 및 예외
- 6. 생성자 실행 중 예외 처리기에서 클래스 인스턴스를 할당하는 방법
- 7. AS3 클래스/기본 클래스 생성자
- 8. 이동 생성자 기본 클래스 이동 생성자
- 9. 상위 생성자 앞에서 하위 클래스 생성자 호출
- 10. 스칼라의 경우 클래스 생성자
- 11. 추상 클래스 생성자
- 12. 클래스 생성자 및 배열
- 13. SystemC 생성자, 클래스
- 14. 파이썬 클래스 생성자
- 15. 자바 하위 클래스 생성자
- 16. 의 C# 클래스 생성자
- 17. 추상 클래스 및 생성자
- 18. 클래스 생성자 문
- 19. 서브 클래스 생성자
- 20. C++ 클래스 복사 생성자
- 21. 콜링 기본 클래스 생성자
- 22. VectorList 클래스 생성자
- 23. Objective-C 클래스 생성자
- 24. 클래스 템플릿 생성자 특수화
- 25. 콜링 기본 클래스 생성자
- 26. 사용하여 컨텍스트 클래스 생성자
- 27. Java 클래스 및 생성자
- 28. C++ 예외 클래스 소스 코드
- 29. 예외 클래스
- 30. Serializable 사용자 정의 예외 클래스?
다른 말로하면 예외 e가 객체 e에 포함됩니다. – Jorge
@ Jorge - 예, 맞습니다. – Oded