[解決済み] 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
これは、通常プログラマが "handled"できないJVM内部のエラーを示すために使われるからです(例えば、以下のようなものです。
OutOfMemoryError
). 同様に
Throwable
をキャッチしてしまう可能性があります。
Error
に加えて
Exception
s.
関連
-
java.util.NoSuchElementException 原因解析と解決方法
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefinedeclipse エラー。この行に複数のアノテーションが見つかりました: - 文字列を型解決に解決できない
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
プロジェクトの依存関係を解決できなかった 解決
-
JQuery DataTable 详解
-
Spring boot runs with Error creating bean with name 'entityManagerFactory' defined in class path resource
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
javaでクラスを作成すると、enclosing classでないように見える
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
java 例外。Javaツールの初期化