Javaでは、 例外 プログラムの実行中に発生し、プログラムの命令の通常の流れを中断するイベントです。望ましくない、プログラムのコードの通常の実行を制限するバグやエラーは、次のように呼ばれます。 例外 。このセクションでは、次の点に焦点を当てます。 Java の例外の種類 そして両者の違い。
例外は次の 2 つの方法に分類できます。
- 組み込みの例外
- チェックされた例外
- 未チェックの例外
- ユーザー定義の例外
組み込みの例外
例外 すでに利用可能です Java ライブラリ と呼ばれます 組み込みの例外 。これらの例外はエラー状況を定義できるため、このエラーが発生した理由を理解できます。それは大きく 2 つのカテゴリに分類できます。 チェックされた例外 そして 未チェックの例外 。
チェックされた例外
チェック済み 例外が呼び出されます コンパイル時 これらの例外はコンパイル時にコンパイラによってチェックされるためです。コンパイラは、プログラマが例外を処理するかどうかを確認します。プログラマは例外を処理する必要があります。そうしないと、システムはコンパイル エラーを示します。
CheckedExceptionExample.java
import java.io.*; class CheckedExceptionExample { public static void main(String args[]) { FileInputStream file_data = null; file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/Hello.txt'); int m; while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); } } 上記のコードでは、 こんにちは.txt ファイルを開き、そのデータまたはコンテンツを画面に表示します。プログラムは次の例外をスローします。
- の FileInputStream(ファイル ファイル名) コンストラクターは ファイルが見つかりません例外 それがチェック例外です。
- の 読む() の方法 ファイル入力ストリーム クラスがスローする IO例外 。
- の 近い() メソッドも IOException をスローします。
出力:
エラーを解決するにはどうすればよいですか?
これらのエラーを解決するには、基本的に 2 つの方法があります。
1) main メソッドで例外が発生します。を使用して main メソッドで例外を宣言することで、これらのコンパイル エラーを取り除くことができます。 スロー 子と親の関係のため、FileNotFoundException ではなく、IOException のみを宣言します。 IOException クラスは FileNotFoundException の親クラスであるため、この例外は IOException によって自動的にカバーされます。次の方法で例外を宣言します。
class Exception{ public static void main(String args[]) throws IOException { ... ... } コードをコンパイルして実行すると、エラーは消え、ファイルのデータが表示されます。
2) これらの例外を次のように処理することもできます。 トライキャッチ ただし、上で使用した方法は正しくありません。例外の種類ごとに意味のあるメッセージを与える必要があります。そうすることで、エラーを理解しやすくなります。 try-catch ブロックは次の方法で使用します。
例外.java
import java.io.*; class Exception{ public static void main(String args[]) { FileInputStream file_data = null; try{ file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/programs/Hell.txt'); }catch(FileNotFoundException fnfe){ System.out.println('File Not Found!'); } int m; try{ while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); }catch(IOException ioe){ System.out.println('I/O error occurred: '+ioe); } } } 適切なエラーメッセージが表示されます 'ファイルが見つかりません!' その場所にはそのようなファイルがないため、コンソール上に表示されます。
未チェックの例外
の チェックされていない 例外はちょうど反対です チェック済み 例外。コンパイラはコンパイル時にこれらの例外をチェックしません。簡単に言うと、プログラムがチェックされていない例外をスローした場合、たとえそれを処理したり宣言しなかったとしても、プログラムはコンパイル エラーを出しません。通常、プログラムとの対話中にユーザーが不正なデータを提供したときに発生します。
注: RuntimeException クラスは、子と親の関係により、未チェックの例外をすべて解決できます。
UncheckedExceptionExample1.java
class UncheckedExceptionExample1 { public static void main(String args[]) { int postive = 35; int zero = 0; int result = positive/zero; //Give Unchecked Exception here. System.out.println(result); } } 上記のプログラムでは、35 を 0 で割っています。コードは正常にコンパイルされますが、実行時に ArithmeticException エラーがスローされます。数値を 0 で除算すると、アンチェック例外であるゼロ除算例外がスローされます。
出力:
UncheckedException1.java
class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } } 出力:
上記のコードでは、位置 7 にある要素を取得しようとしていますが、配列の長さは 6 です。コードは正常にコンパイルされますが、実行時に ArrayIndexOutOfBoundsException がスローされます。
ユーザー定義の例外
で ジャワ 、次のような組み込み例外クラスがすでにいくつかあります。 ArrayIndexOutOfBoundsException , NullPointerException 、 そして 算術例外 。これらの例外は、いくつかの事前定義された条件でトリガーされるように制限されています。 Java では、Exception クラスを拡張することで独自の例外クラスを作成できます。 throw キーワードを使用して、特定の条件で独自の例外をスローできます。ユーザー定義の例外を作成するには、次の基本的な知識が必要です。 の トライキャッチ ブロックして、 投げる キーワード 。
書いてみましょう Javaプログラム ユーザー定義の例外を作成します。
ユーザー定義例外.java
import java.util.*; class UserDefinedException{ public static void main(String args[]){ try{ throw new NewException(5); } catch(NewException ex){ System.out.println(ex) ; } } } class NewException extends Exception{ int x; NewException(int y) { x=y; } public String toString(){ return ('Exception value = '+x) ; } } 出力:
説明:
上記のコードでは、2 つのクラスを作成しました。 ユーザー定義の例外 そして 新しい例外 。の ユーザー定義の例外 にはメインメソッドがあり、 新しい例外 class はユーザー定義の例外クラスであり、これを拡張します。 例外 。の中に 新しい例外 クラスで変数を作成します バツ 整数型で、コンストラクターで値を割り当てます。その変数に値を代入した後、例外メッセージを返します。
ライオンとトラの違い
の中に ユーザー定義の例外 クラスを追加しました トライキャッチ ブロック。 try セクションでは、例外をスローします。つまり、 新しい例外 それに整数を渡します。値は NewException クラスに渡され、メッセージを返します。そのメッセージを catch ブロックでキャッチし、画面に表示します。
チェック済み例外とチェックなし例外の違い
| はい・いいえ | チェックされた例外 | 未チェックの例外 |
|---|---|---|
| 1. | これらの例外はコンパイル時にチェックされます。これらの例外はコンパイル時にも処理されます。 | これらの例外は、チェックされた例外のちょうど反対です。これらの例外はコンパイル時にチェックおよび処理されません。 |
| 2. | これらの例外は例外の直接のサブクラスですが、RuntimeException クラスから拡張されたものではありません。 | これらは、RuntimeException クラスの直接のサブクラスです。 |
| 3. | メソッドがチェック例外をスローした場合、コードはコンパイル エラーを返します。コンパイラは独自に例外を処理できません。 | 例外はコンパイラの通知を逃れるため、コードはエラーなしでコンパイルされます。これらの例外は、プログラミング ロジックでユーザーが作成したエラーの結果です。 |
| 4. | これらの例外は主に、失敗の可能性が高すぎる場合に発生します。 | これらの例外は、主にプログラミング上のミスが原因で発生します。 |
| 5. | 一般的なチェック例外には、IOException、DataAccessException、InterruptedException などが含まれます。 | 一般的な未チェック例外には、ArithmeticException、InvalidClassException、NullPointerException などが含まれます。 |
| 6. | これらの例外は、throws キーワードを使用して伝播されます。 | これらは自動的に伝播されます。 |
| 7。 | チェック例外を処理するには、try-catch ブロックと try-finally ブロックを提供する必要があります。 | 未チェック例外の場合、これは必須ではありません。 |
望ましくない、プログラムの通常の実行を制限するバグやエラーは、次のように呼ばれます。 例外 。
ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions などが該当します。 組み込みの例外 。場合によっては、組み込みの例外だけでは特定の状況を説明または説明できない場合があります。これらの状況を説明するには、例外クラスをサブクラスとして作成することにより、独自の例外を作成する必要があります。 例外 クラス。このようなタイプの例外は、次のカテゴリに分類されます。 ユーザー定義の例外 。