[java] Java에서 사용자 정의 예외를 작성하는 방법은 무엇입니까? [닫은]

Java에서 사용자 정의 예외를 작성하는 방법



답변

점검 된 예외 를 정의하려면 의 서브 클래스 (또는 서브 클래스 계층)를 작성하십시오 java.lang.Exception. 예를 들면 다음과 같습니다.

public class FooException extends Exception {
  public FooException() { super(); }
  public FooException(String message) { super(message); }
  public FooException(String message, Throwable cause) { super(message, cause); }
  public FooException(Throwable cause) { super(cause); }
}

이 예외를 던지거나 전파 할 수있는 메소드는 다음을 선언해야합니다.

public void calculate(int i) throws FooException, IOException;

…이 메소드를 호출하는 코드는이 예외를 처리하거나 전파해야합니다 (또는 둘 다).

try {
  int i = 5;
  myObject.calculate(5);
} catch(FooException ex) {
  // Print error and terminate application.
  ex.printStackTrace();
  System.exit(1);
} catch(IOException ex) {
  // Rethrow as FooException.
  throw new FooException(ex);
}

위의 예에서 IOException로 잡히고 다시 던져지는 것을 알 수 FooException있습니다. 이것은 일반적으로 API를 구현할 때 예외를 캡슐화하는 데 사용되는 일반적인 기술입니다.

때로는 모든 메소드가 throws 절에 예외 구현을 선언하도록 강요하지 않는 상황이있을 수 있습니다. 이 경우 검사되지 않은 예외를 만들 수 있습니다 . 검사되지 않은 예외는 확장 java.lang.RuntimeException되는 예외입니다 (자체 하위 클래스 임 java.lang.Exception).

public class FooRuntimeException extends RuntimeException {
  ...
}

메소드는 FooRuntimeException예외를 선언하지 않고 예외를 던지거나 전파 할 수 있습니다 . 예 :

public void calculate(int i) {
  if (i < 0) {
    throw new FooRuntimeException("i < 0: " + i);
  }
}

검사되지 않은 예외는 일반적으로 프로그래머 오류를 표시하는 데 사용됩니다 (예 : 유효하지 않은 인수를 메소드에 전달하거나 배열 색인 경계를 위반하려는 시도).

java.lang.Throwable클래스는 Java 내에서 발생할 수있는 모든 오류 및 예외의 근본입니다. java.lang.Exception그리고의 java.lang.Error서브 클래스입니다 Throwable. 서브 클래스 Throwable가 발생하거나 잡힐 수 있습니다. 그러나 일반적으로 Error프로그래머가 처리 할 수없는 JVM 내부 오류 (예 :)를 나타내는 데 사용되므로 일반적으로 catch 또는 throw하는 것은 좋지 않습니다 OutOfMemoryError. 마찬가지로을 잡는 것을 피해야합니다. Throwable이 경우 Errors 외에을 잡을 수도 있습니다 Exception.


답변

public class MyException extends Exception {
        // special exception code goes here
}

그것을 다음과 같이 던져라 :

 throw new MyException ("Something happened")

다음과 같이 잡기 :

catch (MyException e)
{
   // something
}


답변

확인 된 예외의 경우 :

public class MyCustomException extends Exception { }

기술적 Throwable으로 확장하는 것은 던져 질 수 있지만 예외는 일반적으로 Exception클래스의 확장 이므로 예외를 확인합니다 (런타임 예외 또는 클래스를 기반으로 한 클래스는 제외). Error일반적으로 JVM 내부를 넘어 정상적으로 처리되도록 설계된 것은 아닙니다.

공개를 예외로 만들 수도 있지만 패키지 전체와 달리 예외를 정의하는 패키지에서만 예외를 사용할 수 있습니다.

맞춤 예외를 던지거나 잡는 한 내장 예외와 동일하게 작동합니다.

throw new MyCustomException()

를 통해 잡아

catch (MyCustomException e) { }


답변