での例外処理 Java
⚡ スマートサマリー
Java 例外処理は、通常のプログラムの流れを妨げる実行時エラーを管理するための構造化されたメカニズムを提供します。try、catch、finally、throw、throws キーワードを使用して、例外的な状況を検出、分離、回復しながら、通常のプログラムの流れを維持します。ping アプリケーションの堅牢性と予測可能性。
例外とは何か Java?
An 例外 Java エラーとは、プログラム命令の実行を中断し、プログラム実行の正常な流れを妨げるイベントです。これは、メソッド内で発生したエラーイベント情報をラップしたオブジェクトであり、ランタイムシステムに渡されます。 Java例外は主に、さまざまな種類のエラー状態を通知するために使用され、開発者が制御された方法でそれらに対応できるようにします。
エラーには大きく分けて2つの種類があります。 Java:
- コンパイル時エラー
- ランタイムエラー
コンパイル時エラーは、さらに2つのタイプに分類できます。
- 構文エラー
- セマンティックエラー
構文エラーの例:
宣言する代わりに int a; あなたはそれを間違って次のように宣言しました in a;コンパイラは、これに対してエラーをスローします。
意味エラーの例: 変数を宣言しました int a; コードの数行の後で、整数を次のように宣言します。 int a;コードをコンパイルすると、これらのエラーはすべて強調表示されます。
実行時エラーの例
ランタイムエラーは、 例外例外とは、プログラム実行の通常の流れを中断するあらゆるイベントのことです。例外の例としては、算術例外、NullPointerException、ゼロ除算例外などがあります。 Java これらは、開発者が直接制御できない状況であることが多い。
詳しくはこちら こちら ビデオにアクセスできない場合
例外処理が必要な理由とは?
サーバーにアクセスするプログラムをコーディングしたとします。開発中は問題なく動作しますが、ping 制御された条件下にあるローカル環境でコードを実行する。
実際の運用中にサーバーがダウンしている場合があります。プログラムがサーバーにアクセスしようとすると例外が発生し、適切な処理が行われないとプログラムは突然終了します。
例外を処理する方法 Java
これまで見てきたように、例外は開発者の制御範囲外であることが多い。しかし、コードの失敗を環境問題のせいにするのは真の解決策ではない。例外的な状況に対処できる堅牢なプログラミングが必要だ。このようなコードは、 例外ハンドラ.
今回の例では、適切な例外処理とは、プライマリサーバーがダウンした場合に、プログラムが自動的にバックアップサーバーに接続することを意味します。
これを実装するには、従来のif文とelse文を使ってサーバーに接続するコードを記述できます。サーバーがダウンしているかどうかを確認し、ダウンしている場合はバックアップサーバーに接続するコードを記述します。しかし、コードに複数の分岐がある場合、「if」と「else」を使ったこのようなコードの構成は効果的ではありません。 Java 例外 処理する。
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Try Catch ブロック Java
Java 通常の処理ロジックとエラー回復ロジックを分離する、組み込みの例外処理メカニズムを提供します。
- 通常のコードは TRY ブロック。
- 例外処理コードは キャッチ ブロック。
この例では、TRYブロックにはサーバーに接続するためのコードが含まれます。CATCHブロックにはバックアップサーバーに接続するためのコードが含まれます。サーバーが稼働している場合は、CATCHブロック内のコードは無視されます。サーバーがダウンしている場合は例外が発生し、CATCHブロック内のコードが実行されます。
つまり、例外は次のように処理されます。 Java.
tryとcatchを使用するための構文
try{ statement(s) } catch (exceptiontype name){ statement(s) }
try-catchブロックの例
ステップ1) 次のコードをエディターにコピーします。
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
ステップ2) ファイルを保存してコードをコンパイルします。コマンド java を使用してプログラムを実行します。 Java例外。
ステップ3) 5行目で算術例外(ゼロ除算)が発生し、6行目は実行されません。
ステップ4) それでは、try と catch がこの例外の処理にどのように役立つかを見ていきましょう。例外を引き起こすコード行を、 試します ブロックの後に キャッチ ブロック。次のコードをエディターにコピーします。
class JavaException { public static void main(String args[]) { int d = 0; int n = 20; try { int fraction = n / d; System.out.println("This line will not be Executed"); } catch (ArithmeticException e) { System.out.println("In the catch Block due to Exception = " + e); } System.out.println("End Of Main"); } }
ステップ5) コードを保存、コンパイル、実行してください。以下の出力が得られます。
ご覧のとおり、例外は処理され、最後のコード行も実行されます。また、7行目は実行されないことに注意してください。 例外が発生するとすぐに、制御フローは catch ブロックにジャンプします。
注意: ArithmeticException オブジェクト「e」には、発生した例外に関する情報が含まれており、これは回復措置を講じる際に役立ちます。
Java 例外クラスの階層構造
1 つの catch 文が実行されると、他の catch 文はスキップされ、try ブロックと catch ブロックの後のコードの実行が続行されます。ネストされた catch ブロックは、最も具体的なサブクラスから最も一般的な親クラスへと、例外階層に従う必要があります。
- すべての例外クラス Java Throwable クラスを拡張します。Throwable には、Error と Exception という 2 つのサブクラスがあります。
- Error クラスは、プログラム内で通常の状況下では発生しないと想定される例外や問題を定義します。たとえば、メモリ エラー、ハードウェア エラー、JVM エラーなどです。
- Exceptionクラスは、プログラムが処理できる例外を表し、プログラムはtryブロックとcatchブロックを使用してこれらの例外から回復できます。
- RuntimeException は Exception クラスのサブクラスです。このタイプの例外は、実行時に発生し、コンパイル時には検出できない非チェック例外を表します。良い例としては、ゼロ除算例外やヌルポインタ例外などがあります。
- 入出力操作中にIOExceptionが発生します。
- InterruptedException Java マルチスレッド処理中にスレッドが中断されたときに生成されます。
例:tryブロックとcatchブロックのネスト
ステップ1) 次のコードをエディターにコピーします。
class JavaException { public static void main(String args[]) { try { int d = 1; int n = 20; int fraction = n / d; int g[] = { 1 }; g[20] = 100; } /*catch(Exception e){ System.out.println("In the catch block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
ステップ2) ファイルを保存してコードをコンパイルします。以下のコマンドを使用してプログラムを実行します。 ジャワ Java例外.
ステップ3) ArrayIndexOutOfBoundsException が発生します。int 型の変数 d の値を 0 に変更してください。コードを保存、コンパイル、実行してください。
ステップ4) ArithmeticException を生成する必要があります。
ステップ5) 10行目から12行目までのコメントを解除してください。コードを保存、コンパイル、実行してください。
ステップ6)コンパイルエラー? これは、Exception が ArithmeticException の基底クラスであるためです。ArithmeticException によって発生する例外はすべて、Exception クラスによって処理できます。そのため、ArithmeticException の catch ブロックは実行される機会がなく、冗長になります。したがって、コンパイルエラーが発生します。
Java 最後にブロック
最後のブロックは、 例外が発生しても関係なく実行される try ブロック内。 それは 任意 tryブロックと一緒に使用します。finallyブロックは、データベース接続、ファイル、ネットワークソケットなどのリソースを解放するのに最適な場所です。
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
tryブロック内で例外が発生した場合、finallyブロックはcatchブロックの実行が完了した後に実行されます。
finallyブロックの例
ステップ1) 次のコードをエディターにコピーします。
class JavaException { public static void main(String args[]){ try{ int d = 0; int n =20; int fraction = n/d; } catch(ArithmeticException e){ System.out.println("In the catch block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
ステップ2) コードを保存、コンパイル、実行してください。
ステップ3) 期待される出力:例外が発生した場合でも、finallyブロックが実行される。
ステップ4) 変数 d の値を 1 に変更してください。コードを保存、コンパイル、実行し、出力結果を確認してください。
のベスト プラクティス Java 例外処理
いくつかの実証済みのルールに従うことで、 Java 堅牢で読みやすく、デバッグしやすいコード:
- 例外階層の整合性を維持するために、最も具体的な例外を最初に捕捉し、次に一般的な例外を捕捉します。
- 空のcatchブロックは避けてください。少なくとも、例外をログに記録して、根本原因が失われないようにしてください。
- ファイル、ソケット、データベース接続を解放するには、finally ブロックを使用するか、リソースを指定して try ブロックを使用してください。
- 呼び出し元が合理的に回復できる場合にのみチェック例外をスローし、プログラミングエラーには非チェック例外を使用してください。
- API の一貫性を保つために、低レベルの例外を意味のあるビジネス例外でラップしますtrac清潔です。
- マルチスレッドコードでは、InterruptedException を黙って無視せず、代わりに割り込みフラグを復元してください。








