java.lang
클래스 Throwable
java.lang.Object java.lang.Throwable
- 모든 구현된 인터페이스:
- Serializable
public class Throwable
- extends Object
- implements Serializable
- extends Object
Throwable
클래스는 Java 언어의 모든 에러와 예외의 슈퍼 클래스입니다. 이 클래스 (또는 그 서브 클래스 중의 1개)의 인스턴스인 객체만이 Java 가상 머신에 의해 발생되는 지, Java throw
구문에 의해 발생 됩니다. 똑같이, 이 클래스 또는 그 서브 클래스 중의 1개 만이 catch
절의 인수의 형태로 지정할 수 있습니다.
보통, Error
및 Exception
2개의 서브 클래스의 인스턴스는 예외적인 상황이 발생한 것을 나타내기 위해서 사용됩니다. 이러한 인스턴스는 보통, 관련된 정보 (스택 트레이스 데이터등)를 포함하기 위해서 예외적인 상황에 따라 새롭게 작성됩니다.
Throw 가능 객체에는 작성시의 그 thread의 실행 스택의 snapshot가 포함됩니다. 이 클래스에는 에러에 대한 상세한 정보를 나타내는 메세지 캐릭터 라인도 포함됩니다. 최종적으로 이것은 「원인」 (이 Throw 가능 객체의 Throw를 일으킨 다른 Throw 가능 객체)을 포함할 수 있습니다 . 원인 기능은 릴리스 1.4 신기능입니다. 이것은 원인 자체가 원인을 보관 유지해 예외의 연쇄를 작성할 수 있기 때문에 「체인 된 예외」기능이라고도 불립니다.
Throw 가능 객체가 원인을 보관 유지할 수 있는 1개의 이유로서 Throw 가능 객체를 Throw 하는 클래스가 하위 레이어 추상화 위에 구축되고 있는 것이 들고 있습니다. 이 때문에 상위 레이어에 대한 조작이 실패하는 것은 하위 레이어에서의 조작이 실패하기 때문에입니다. 하위 레이어에 의해 발생되는 Throw 가능 객체를 외부에 송신하는 것은 부적절한 설계 방법입니다. 이것은 보통, 상위 레이어에 의해 제공되는 추상화 기능과는 관계가 없기 때문입니다. 게다가 이러한 조작을 실시하면, 상위 레이어의 API를 구현의 상세하게 연결시켜 버리기 때문에 하위 레이어의 예외가 체크 예외라고 보여져 버립니다. 「랩 된 예외」 (원인을 포함한 예외)을 Throw 하면, 이러한 결점에 접하지 않고 상위 레이어가 장해의 상세를 호출해 측에 통신할 수 있게 됩니다. 이 때문에 상위 레이어의 구현 (특히 메서드에 의해 발생되는 예외세트)을 API를 변경하지 않고 유연하게 변경할 수 있습니다.
Throw 가능 객체가 원인을 보관 유지하는 2번째의 이유는 Throw 가능 객체를 Throw 하는 메서드가 원인을 직접 Throw 하는 것을 메서드에 허가하지 않는 범용 인터페이스에 준거할 필요가 있는 것입니다. 예를 들어 지속 컬렉션이 Collection
인터페이스에 준거해, 그 지속성이 java.io 상위에 구현되는 경우를 생각합시다. put 메서드의 내부는 IOException
를 Throw 가능하다라고 합니다. 이 경우 적절한 체크되지 않는 예외의 IOException을 감싸는 것으로써, 구현은 Collection 인터페이스에 준거하면서, IOException 상세를 호출해 측에 통지할 수 있습니다. 지속 컬렉션의 사양에 이런 종류의 예외를 Throw 가능하다라고 하는 것이 나타나고 있을 필요가 있습니다.