Javaでの例外処理に関する簡単な説明

Javaでの例外処理に関する簡単な説明


1.例外の概要

例外は、プログラムの実行中に発生する予期しないイベントであり、プログラマーの期待どおりにプログラムが正常に実行されないようにします。これは例外です。例外が発生すると、プログラムはそれ自体をかわし、すぐに終了して終了します。Javaでは、つまり、Javaのコンパイル、実行、または実行中に発生するエラー。

Java例外処理メカニズムにより、プログラムは、例外が発生したときにコードの事前設定された例外処理ロジックに従って例外を処理できるため、プログラムは通常に戻って可能な限り実行を継続し、コードを明確に保つことができます。

Javaの例外は、関数内のステートメントが実行されるときに発生するか、throwステートメントを介してプログラマーが手動でスローすることができます。Javaプログラムで例外が生成される限り、対応するタイプの例外オブジェクトを使用してカプセル化します。 JREは、例外を処理するための例外ハンドラーを見つけようとします。


2.異常分類

例外のルートインターフェイスであるThrowableには、ErrorとExceptionの2つのサブインターフェイスがあります。

  • エラーは、プログラムが処理する必要のないシステムレベルのエラーと例外を表します。回復が不可能ではないが困難な場合、深刻な問題になります。
    たとえば、メモリオーバーフロー、プログラムがそのような状況を処理することは期待できません。
  • 例外は、プログラムでキャッチまたは処理する必要のある例外を表します。これは、設計または実装の問題です。つまり、プログラムが正常に実行された場合には決して発生しない状況を表します。
    • RuntimeExceptionはExceptionのサブクラスであり、それを処理するかどうかはユーザーが選択できます。

ここに画像の説明を挿入します
一般的な例外:

  • 入出力例外:IOException
  • 算術例外クラス:ArithmeticExecption
  • ヌルポインタ例外クラス:NullPointerException
  • 型キャスト例外:ClassCastException
  • オペレーションデータベースの例外:SQLException
  • ファイルが見つからない例外:FileNotFoundException
  • 配列の負の添え字例外:NegativeArrayException
  • 配列添え字の範囲外例外:ArrayIndexOutOfBoundsException
  • 安全原則の例外への違反:SecturityException
  • ファイルが例外を終了しました:EOFException
  • 数値例外への文字列変換:NumberFormatException
  • メソッドが見つからない例外:NoSuchMethodException

3.例外処理

Javaは、オブジェクト指向のアプローチを使用して例外を処理し、さまざまな例外を分類し、優れたインターフェースを提供します。Javaでは、各例外はオブジェクトであり、Throwableクラスまたはそのサブクラスのインスタンスです。メソッドで例外が発生すると、例外オブジェクトがスローされます。オブジェクトには例外情報が含まれています。このオブジェクトを呼び出すメソッドは、例外をキャッチして処理できます。

キーワード: throws、throw、try、catch、finally
ここに画像の説明を挿入します
。通常の状況では、tryを使用してプログラムを実行します。システムが例外オブジェクトをスローした場合、そのタイプまたは合計でキャッチできます。コードを実行することです。処理するために(最終的に)ブロックします。

  • tryは、すべての例外を防ぐプログラムを指定するために使用されます。
  • catch句は、tryブロックの直後に続き、キャッチする例外のタイプを指定します。
  • throwステートメントは、例外を明示的にスローするために使用されます。
  • throwsは、メソッドがスローする可能性のあるさまざまな例外を宣言するために使用されます。
  • 最後に、どのような異常な状況が発生した場合でも、コードの一部が確実に実行されるようにするため。

tryステートメントはネストできます。tryステートメントが検出されると、すべてのtryステートメントが完了するまで例外の構造が例外スタックに配置されます(例外キャプチャプロセス中に2つの判断が行われ、最初の判断はtryです。プログラムブロックの例外。2つ目は、生成された例外が、catch()ブラケットでキャッチする例外と同じかどうかです。次のレベルのtryステートメントが特定の例外を処理しない場合、例外スタックは、この例外を処理するtryステートメントに遭遇するか、最終的に例外をJVMにスローするまで、ポップ操作を実行します。

例外処理フォーマットは3つのカテゴリに分類できます

  • try {}-キャッチ{}
  • try {}-キャッチ{}-最後に{}
  • try {}-最後に{}

例:

	try{
    
    
		return;
	}catch(){
    
    
	
	}finally{
    
    
	
	}
	return;

上記の短い文を通して、この文の実行順序を分析します。プログラムの実行順序に従って、コードセグメントは最初にtryステートメントを入力し、例外がスローされないため、コードはメモリに返されるコンテンツを保存してから、最後に実行します。実行可能なコンテンツがないため、最後に、リターンの実行試行に戻ります。コードセグメントの実行は終了し、finally以降のリターンは実行されません。

  1. 例外があるかどうかに関係なく、finallyブロックのコードが実行されます。
  2. tryとcatchに戻りがある場合でも、finallyは実行されます。
  3. 戻り後の式演算後にfinallyが実行されます(この時点では演算後の値は返されませんが、finallyのコードに関係なく、返される値が最初に保存されます。戻り値は変わりません。前に保存された値)、したがって、関数の戻り値は最終的に実行される前に決定されます。
  4. 最終的にreturnを含めないことをお勧めします。そうしないと、プログラムは早期に終了し、戻り値はtryまたはcatchで保存された戻り値ではありません。

ランタイム例外とチェック済み例外

  • ランタイム例外は、仮想マシンの通常の操作で発生する可能性のある例外を表します。これは一般的な操作エラーであり、プログラムが問題なく設計されている限り、通常は発生しません。

  • チェックされた例外は、プログラムが実行されているコンテキストに関連しています。プログラムの設計が正しい場合でも、使用上の問題が原因である可能性があります。Javaコンパイラでは、メソッドが発生する可能性のあるチェック済み例外をスローすることを宣言する必要がありますが、キャッチされないランタイム例外をスローすることを宣言する必要はありません。

継承などの例外は、オブジェクト指向プログラミングで悪用されることがよくあります。EffectiveJavaで例外を使用する場合は、次のガイドラインを参照してください。

  • 通常の制御フローに例外処理を使用しないでください(適切に設計されたAPIは、呼び出し元に通常の制御フローに例外を使用するように強制しないでください)
  • 回復可能な状態にはチェック済みの例外を使用し、プログラミングエラーには実行時の例外を使用します
  • チェックされた例外の不必要な使用を避けます(例外を回避するためにいくつかの状態検出方法を使用できます)
  • 標準の例外を優先する
  • 各メソッドによってスローされた例外を文書化する必要があります
  • 異常な原子性を保つ
  • catchでcatchされた例外を無視しないでください

おすすめ

転載: blog.csdn.net/baidu_41847368/article/details/114884028