Javaでは例外 プログラムの実行中、つまり実行時に発生し、プログラムの命令の通常の流れを中断する、望ましくない、または予期しないイベントです。
Java には、次の 2 種類の例外があります。
- チェックされた例外
- 未チェックの例外
Java のチェックされた例外
これら コンパイル時にチェックされる例外です。メソッド内の一部のコードがチェック例外をスローする場合、メソッドは例外を処理するか、メソッドを使用して例外を指定する必要があります。 投げる キーワード 。チェック例外には、完全チェック例外と部分チェック例外の 2 種類があります。完全にチェックされた例外は、IOException や InterruptedException など、そのすべての子クラスもチェックされるチェックされた例外です。部分的にチェックされた例外は、例外のように、子クラスの一部がチェックされていないチェックされた例外です。
たとえば、C: esta.txt の場所にあるファイルを開き、その最初の 3 行を出力する次の Java プログラムについて考えてみましょう。関数 main() が FileReader() を使用し、FileReader() がチェック例外をスローするため、プログラムはコンパイルされません。 ファイルが見つかりません例外 。また、readLine() メソッドと close() メソッドも使用され、これらのメソッドもチェック例外をスローします。 IO例外
例:
ジャワ
Java文字列を逆にする
// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException occurred> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > {> > // Reading file from path in local directory> > FileReader file => new> FileReader(> 'C: esta.txt'> );> > // Creating object as one of ways of taking input> > BufferedReader fileInput => new> BufferedReader(file);> > // Printing first 3 lines of file 'C: esta.txt'> > for> (> int> counter => 0> ; counter <> 3> ; counter++)> > System.out.println(fileInput.readLine());> > // Closing file connections> > // using close() method> > fileInput.close();> > }> }> |
Javaサンプルプログラム
>
>
出力:
上記のプログラムを修正するには、throws を使用して例外のリストを指定するか、try-catch ブロックを使用する必要があります。以下のプログラムでは throws を使用しています。以来 ファイルが見つかりません例外 のサブクラスです IO例外 、指定するだけです IO例外 throws リストに追加して、上記のプログラムをコンパイラエラーが発生しないようにします。
例:
ジャワ
// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException does not occur> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > throws> IOException> > {> > // Creating a file and reading from local repository> > FileReader file => new> FileReader(> 'C: esta.txt'> );> > // Reading content inside a file> > BufferedReader fileInput => new> BufferedReader(file);> > // Printing first 3 lines of file 'C: esta.txt'> > for> (> int> counter => 0> ; counter <> 3> ; counter++)> > System.out.println(fileInput.readLine());> > // Closing all file connections> > // using close() method> > // Good practice to avoid any memory leakage> > fileInput.close();> > }> }> |
>
>
出力:
First three lines of file 'C: esta.txt'>
Java の未チェック例外
これらはコンパイル時にチェックされない例外です。 C++ では、すべての例外がチェックされないため、コンパイラによって例外の処理や指定が強制されることはありません。文明を身につけて例外を指定したり、例外をキャッチしたりできるかどうかは、プログラマ次第です。 Java では、次の例外が発生します。 エラー そして ランタイム例外 クラスはチェックされていない例外であり、throwable の下にある他のすべてがチェックされます。
ラドヤード・キプリングの言葉を言い換えると
次の Java プログラムについて考えてみましょう。コンパイルはうまくいきますが、スローされます 算術例外 実行するとき。コンパイラはコンパイルを許可します。 算術例外 はチェックされていない例外です。
例:
ジャワ
xdの意味
// Java Program to Illustrate Un-checked Exceptions> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String args[])> > {> > // Here we are dividing by 0> > // which will not be caught at compile time> > // as there is no mistake but caught at runtime> > // because it is mathematically incorrect> > int> x => 0> ;> > int> y => 10> ;> > int> z = y / x;> > }> }> |
>
>
出力
Exception in thread 'main' java.lang.ArithmeticException: / by zero at Main.main(Main.java:5) Java Result: 1>
つまり、未チェック例外は、スロー句でキャッチしたり宣言したりする必要のない実行時例外です。これらの例外は通常、配列内の範囲外のインデックスにアクセスしようとしたり、ゼロで除算しようとしたりするなどのプログラミング エラーによって発生します。
未チェック例外には、RuntimeException クラスのすべてのサブクラス、Error クラスとそのサブクラスが含まれます。
Java での未チェック例外の例をいくつか示します。
1. ArrayIndexOutOfBounds例外: この例外は、範囲外の配列インデックスにアクセスしようとするとスローされます。
2. NullPointerException: この例外は、null オブジェクト参照にアクセスしようとするとスローされます。
3. 算術例外: この例外は、ゼロで除算しようとした場合、または無効な算術演算を実行しようとした場合にスローされます。