例外には、チェックされた例外とチェックされていない例外の二つのタイプがあります。 このガイドでは、それらについて説明します。 チェック例外と非チェック例外の主な違いは、チェック例外はコンパイル時にチェックされ、非チェック例外は実行時にチェックされることです。
チェックされた例外とは何ですか?
チェックされた例外はコンパイル時にチェックされます。, これは、メソッドがチェックされた例外をスローしている場合、try-catchブロックを使用して例外を処理するか、throwsキーワードを使用して例外を宣言する必要が
例の助けを借りてこれを理解しましょう:
Checked Exception Example
この例では、ファイルmyfile.txt
を読み取り、その内容を画面に表示しています。 このプログラムであるが、確認の例外がスローされに対してコメントします。, ファイルパスと名前を指定するために使用されるFileInputStreamは、FileNotFoundException
をスローします。 ファイルの内容を読み取るread()メソッドはIOException
をスローし、ファイル入力ストリームを閉じるclose()メソッドもIOException
をスローします。
出力:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Unhandled exception type FileNotFoundExceptionUnhandled exception type IOExceptionUnhandled exception type IOException
このコンパイルエラーはなぜですか? 最初に述べたように、checked exceptionsはコンパイル時にチェックされます。 例外を処理/宣言しなかったため、プログラムはコンパイルエラーを発生させました。
どのようにエラーを解決するには?, このエラーを回避するには二つの方法があります。 私たちは両方の方法を一つずつ見ていきます。
方法1:throwsキーワードを使用して例外を宣言します。
私たちは、チェックされた例外のすべての三つの出現がmain()メソッド内にあることを知っているので、コンパイルエラーを回避するための一つの方法 私たちのコードがFileNotFoundExceptionとIOExceptionの両方をスローしていると思っているかもしれませんが、なぜIOExceptionだけを宣言しているのでしょうか。 その理由は、IOExceptionがFileNotFoundExceptionの親クラスであるため、デフォルトではそれをカバーしているためです。, 必要に応じて、次のように宣言できますpublic static void main(String args) throws IOException, FileNotFoundException
。
出力:
ファイルの内容が画面に表示されます。
方法2:try-catchブロックを使用してそれらを処理します。
上記のアプローチはまったくうまくいきません。 これは最良の例外処理方法ではありません。 誰かがエラーを理解しやすくなるように、各例外タイプに意味のあるメッセージを与える必要があります。 コードは次のようにする必要があります。
このコードは正常に実行され、ファイルの内容が表示されます。,
他のいくつかのチェックされた例外は次のとおりです。
SQLException
IOException
ClassNotFoundException
InvocationTargetException
非チェック例外とは何ですか?
非チェック例外はコンパイル時にチェックされません。 これは、プログラムが非チェック例外をスローしていて、その例外を処理/宣言していなくても、プログラムはコンパイルエラーを出さないことを意味しま しこれらの例外により発生する場合があり、不良データによるユーザのユーザー-プログラムの相互作用, このような例外を引き起こし、適切に処理できる条件を事前に判断するのはプログラマー次第です。 すべての非チェック例外はRuntimeExceptionクラスの直接のサブクラスです。
例でこれを理解することができます:
非チェック例外例
このコードをコンパイルすると正常にコンパイルされますが、実行するとArithmeticException
これは、非チェック例外がコンパイル時にチェックされず、実行時に発生することを明確に示しています。 別の例を見てみましょう。,
ArrayIndexOutOfBoundsException
もチェックされていない例外であるため、このコードも正常にコンパイルされます。
注:コンパイラがこれらの例外をチェックしていないという意味ではないので、処理しないでください。 実際は私達はそれらをより注意深く扱うべきである。 たとえば、上記の例では、ユーザーが問題を修正できるように、配列内に存在しない値を表示しようとしているという例外メッセージがユーザーに表示されるは,
Output:
The specified index does not exist in array. Please correct the error.
Here are the few unchecked exception classes:
NullPointerException
ArrayIndexOutOfBoundsException
ArithmeticException
IllegalArgumentException
NumberFormatException