ProgrammingバックエンドJava開発者

Javaにおける例外(exceptions)とは何ですか?checked exceptionsとunchecked exceptionsの違いを説明し、どのカテゴリーをいつ使用するべきか教えてください。

Hintsage AIアシスタントで面接を突破

回答

例外(exceptions)は、Javaにおけるエラー処理のメカニズムです。スローされるオブジェクトはすべてThrowableの派生クラスです。主に二つのカテゴリーがあります:

  • Checked exceptionsRuntimeExceptionを除くExceptionの子孫):明示的に処理するか、throwsを使ってメソッドシグネチャに宣言する必要があります。
  • Unchecked exceptionsRuntimeExceptionの子孫):明示的に処理する必要はなく、任意の場所で発生する可能性があります(例えば、NullPointerException)。

いつ使用するか?

  • Checked — 期待されるエラーで、処理できる可能性がある場合(例えば、ファイルやネットワークエラー)。
  • Unchecked — プログラムの欠陥を示すエラー(例えば、不正な配列インデックス)。
コード例
public void readFile(String path) throws IOException { // Checked exception — 処理が必要 Files.readAllLines(Paths.get(path)); } public void divide(int a, int b) { int c = a / b; // Unchecked — ArithmeticException }

注意を要する質問

throwsを宣言しないメソッドがchecked exceptionをスローすることはできますか?

回答: いいえ、コンパイラーはメソッドシグネチャ(throws)に宣言されていないchecked exceptionをスローすることを許可しません。しかし、unchecked exceptionは警告なしにスローされる可能性があります。

void foo() { throw new IOException(); // コンパイルエラー }

このテーマの知識不足による実際のエラーの例


ストーリー

インターネットバンキングでは、クライアントがSQLExceptionsの処理を無視し、uncheckedラッパーを使用することを決定しました。その結果、ドライバーの更新中に見えないエラーが発生し、データの不整合につながりました。


ストーリー

ロギングアプリケーションでは、ロガーファイルがキャッチされていないchecked exception(FileNotFoundException)のためにロックされたままで、呼び出しチェーン内で「失われ」、タイムリーに処理されず、アプリケーションはログに書き込むことができなくなりました。


ストーリー

取引プラットフォームでは、チームが全体のcatch(Throwable)を実装して「決してクラッシュしない」ことを目的としました。結果的に、クリティカルなunchecked exceptionsが隠蔽され、アプリケーションは不整合な状態で動作を続け、複雑なバグやデータ損失を引き起こしました。