未報告例外: 意味と解決策
Java プログラマは、次のようなエラーに遭遇することがよくあります:
"エラー: 未報告例外 (XXX は名前です)例外クラス。「
の意味とJava」概念
このエラーは次のことを示します:
- コードがチェック例外 (XXX) をスローまたは伝播しています。
- 例外が適切に処理されていませんそれをキャッチするか、要求に応じて宣言することによって、 Java。
解決策
問題を解決するには、2 つのオプションがあります。
-
例外をキャッチする: try ... catch ブロックを使用して、現在のメソッド内で例外を処理します。 method.
-
メソッドが例外をスローすることを宣言します: メソッドまたはコンストラクターのシグネチャに throws キーワードの後に例外の名前を追加して、例外処理の責任を呼び出し元に渡します。
チェックありとチェックなし例外
Java は例外を 2 つのタイプに分類します:
-
チェックされた例外: Throwable、Exception (およびサブクラス) (RuntimeException とそのサブクラスを除く)。
-
チェックなし例外: Error (およびサブクラス)、RuntimeException (およびサブクラス)。
チェックされた例外には明示的な処理が必要ですが、チェックされていない例外には明示的な処理が必要ありません。
例: スローそして同じことに巻き込まれるMethod
static void t() throws IllegalAccessException {
try {
throw new IllegalAccessException("demo");
} catch (IllegalAccessException e) {
System.out.println(e);
}
}
ログイン後にコピー
この例では、 t メソッドが例外をスローしますが、これも同じメソッド内でキャッチされて処理されます。したがって、署名内の throws 宣言は削除する必要があります。
例外を伴う悪い習慣
次の悪い習慣を避けてください:
-
Catching Exception (または Throwable): 代わりに特定の例外をキャッチします。意図しない処理を防止します。
-
例外をスローするメソッドとして宣言する: 呼び出し元にチェック済み例外の処理を強制することは避けてください。
-
例外の破棄: しないでください。実行時エラーが発生しにくくなる可能性があるため、例外を無視します。診断します。
特殊なケース
-
静的初期化子: フィールド宣言の代わりに静的ブロックでチェック例外をスローする静的変数を宣言します。
-
静的ブロック: 静的ブロック内でキャッチされた例外は次のとおりです。囲みがないため、ブロック内で処理されます。 context.
-
Lambdas: Lambdas は、関数インターフェイスの要件により、未チェックの例外をスローできません。ラムダ自体内で例外を処理します。
-
同じ名前の 2 つの例外: throws キーワードが存在するにもかかわらずコンパイラが「報告されていない例外」エラーを報告する場合は、例外名が異なっているかどうかを確認してください。さまざまな例外を示す完全修飾名。
さらに情報
Java 例外の詳細については、次のリソースを参照してください。
- [Oracle Java チュートリアル: キャッチまたは指定の要件](https://docs.oracle) .com/javase/tutorial/essential/Exceptions/catchOrDeclare.html)
- [キャッチと処理例外](https://docs.oracle.com/javase/tutorial/essential/Exceptions/handling.html)
- [メソッドによってスローされる例外の指定](https://docs.oracle.com /javase/tutorial/essential/Exceptions/throwing.html)
以上がJava の「報告されない例外」エラーの原因と解決策は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。