Java でカスタム例外を作成するにはどうすればいいですか? [closed] 質問する

Java でカスタム例外を作成するにはどうすればいいですか? [closed] 質問する

Java でカスタム例外を作成するにはどうすればよいでしょうか?

ベストアンサー1

定義するにはチェック済み例外として、サブクラス(またはサブクラスの階層)を作成します。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内部のエラーを示すために使用されます(例:OutOfMemoryError同様に、Throwable、その結果、Errorに加えてExceptions。

おすすめ記事