IllegalStateException — 메서드가 불려선 안 될 시점에 불렸을 때

IllegalStateException — 메서드가 불려선 안 될 시점에 불렸을 때

IllegalStateException은 메서드가 부적절한(illegal) 시점이나 부적절한 상태에서 호출됐음을 나타내는 예외예요. 다시 말해, 요청한 연산을 수행하기에 자바 환경이나 애플리케이션 상태가 적절하지 않다는 뜻이에요.

출처: Java API Reference

본문

예를 들어 아직 초기화되지 않은 객체에 연산을 시도하거나, 이미 닫힌 스트림에서 작업하려 할 때 이 예외가 흔히 던져져요. 특히 컬렉션 iterator에서 요소를 제거하려는데 이전에 next()를 호출하지 않았다든지, Scanner나 스트림이 이미 닫혀 있는데 또 쓴다든지 하는 상황에서 많이 만나요.

상속 구조는 다음과 같아요.

java.lang.Object
  java.lang.Throwable
    java.lang.Exception
      java.lang.RuntimeException
        java.lang.IllegalStateException

많은 표준 예외가 이 클래스를 상속받는데, 예를 들어 CancellationException, ClosedFileSystemException, FormatterClosedException 등이 있어요.

생성자

  • IllegalStateException() — 상세 메시지 없이 생성해요.
  • IllegalStateException(String s) — 지정된 상세 메시지로 생성해요.
  • IllegalStateException(String message, Throwable cause) — 상세 메시지와 원인을 함께 지정해요. 원인의 메시지는 자동으로 합쳐지지 않아요.
  • IllegalStateException(Throwable cause) — 원인만 지정하고, 메시지는 cause == null ? null : cause.toString() 형태로 생성해요. 다른 예외를 감싸는 용도로 유용해요.

cause를 받는 생성자는 자바 1.5부터 제공돼요.

더 알아보기 (Learn more)