での例外処理 Java

⚡ スマートサマリー

Java 例外処理は、通常のプログラムの流れを妨げる実行時エラーを管理するための構造化されたメカニズムを提供します。try、catch、finally、throw、throws キーワードを使用して、例外的な状況を検出、分離、回復しながら、通常のプログラムの流れを維持します。ping アプリケーションの堅牢性と予測可能性。

  • ⚠️ 例外の定義: 例外とは、標準の実行シーケンスを中断する実行時イベントであり、エラー状態を記述するオブジェクトとして表されます。
  • 🧯 トライ・キャッチ・ブロック: リスクの高いコードはtryブロックで囲み、その後に1つ以上のcatchブロックを追加して、特定の例外タイプを適切に捕捉します。
  • 🔁 最後に、動作: finallyブロックは常にtryとcatchの後に実行されるため、ファイルやソケットを閉じたり、その他のシステムリソースを解放したりするのに最適です。
  • 例外階層: すべての例外は Throwable を継承し、Throwable は Error と Exception に分岐し、RuntimeException はゼロ除算などのチェックされないケースをカバーします。
  • 🧪 ベストプラクティス: 最も具体的な例外を最初に捕捉し、空のcatchブロックを避け、意味のあるメッセージをログに記録し、複数の例外をまとめて捕捉することで、コードを簡潔かつ保守しやすい状態に保ちます。

での例外処理 Java

例外とは何か Java?

An 例外 Java エラーとは、プログラム命令の実行を中断し、プログラム実行の正常な流れを妨げるイベントです。これは、メソッド内で発生したエラーイベント情報をラップしたオブジェクトであり、ランタイムシステムに渡されます。 Java例外は主に、さまざまな種類のエラー状態を通知するために使用され、開発者が制御された方法でそれらに対応できるようにします。

エラーには大きく分けて2つの種類があります。 Java:

  1. コンパイル時エラー
  2. ランタイムエラー

コンパイル時エラーは、さらに2つのタイプに分類できます。

  • 構文エラー
  • セマンティックエラー

構文エラーの例:

宣言する代わりに int a; あなたはそれを間違って次のように宣言しました in a;コンパイラは、これに対してエラーをスローします。

意味エラーの例: 変数を宣言しました int a; コードの数行の後で、整数を次のように宣言します。 int a;コードをコンパイルすると、これらのエラーはすべて強調表示されます。

実行時エラーの例

ランタイムエラーは、 例外例外とは、プログラム実行の通常の流れを中断するあらゆるイベントのことです。例外の例としては、算術例外、NullPointerException、ゼロ除算例外などがあります。 Java これらは、開発者が直接制御できない状況であることが多い。

詳しくはこちら こちら ビデオにアクセスできない場合

例外処理が必要な理由とは?

サーバーにアクセスするプログラムをコーディングしたとします。開発中は問題なく動作しますが、ping 制御された条件下にあるローカル環境でコードを実行する。

Java 例外処理

実際の運用中にサーバーがダウンしている場合があります。プログラムがサーバーにアクセスしようとすると例外が発生し、適切な処理が行われないとプログラムは突然終了します。

Java 例外処理

例外を処理する方法 Java

これまで見てきたように、例外は開発者の制御範囲外であることが多い。しかし、コードの失敗を環境問題のせいにするのは真の解決策ではない。例外的な状況に対処できる堅牢なプログラミングが必要だ。このようなコードは、 例外ハンドラ.

今回の例では、適切な例外処理とは、プライマリサーバーがダウンした場合に、プログラムが自動的にバックアップサーバーに接続することを意味します。

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 通常の処理ロジックとエラー回復ロジックを分離する、組み込みの例外処理メカニズムを提供します。

  1. 通常のコードは TRY ブロック。
  2. 例外処理コードは キャッチ ブロック。

キャッチブロックを試してみる

この例では、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 例外階層

  • すべての例外クラス 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 を黙って無視せず、代わりに割り込みフラグを復元してください。

よくあるご質問

チェック例外はコンパイル時に検証され、IOExceptionのように宣言または捕捉する必要があります。非チェック例外はRuntimeExceptionを継承し、実行時に発生し、NullPointerExceptionやArithmeticExceptionのように必須の処理を必要としません。

finally ブロックは、例外が発生したかどうかに関わらず、try ブロックと catch ブロックの後に必ず実行されます。ファイル ハンドル、データベース接続、ソケットなどのリソースを解放するのに最も安全な場所であり、操作のクリーンな終了を保証します。

throw キーワードは、メソッド内で実際に例外オブジェクトを発生させるために使用され、throws はメソッドのシグネチャで使用され、メソッドが特定のチェック例外を呼び出し元に渡して処理させる可能性があることを宣言します。

はい。tryブロックの後にcatchブロックなしでfinallyブロックを続けることができます。このパターンは、例外自体が呼び出し元に伝播される場合でも、クリーンアップコードが確実に実行されるようにしたい場合に使用されます。

はい。AI を活用したオブザーバビリティツールがスタックを分析します。 trac実行時例外が発生する可能性のある場所を予測するために、ログやコードパスを分析します。防御的なチェックを提案し、キャッチの配置を推奨し、異常を顕在化します。ping チームは、本番環境に到達する前にクラッシュを未然に防ぐ。

AIアシスタントがスタックを解析する tracそれらをソースコードと関連付け、考えられる根本原因と修正案を提案します。try-catch テンプレートを生成し、ログ記録の改善を推奨し、さらには欠陥のあるメソッドを書き換えることで、開発者が診断に費やす時間を劇的に削減します。 Java 例外。