Java での例外処理について話す

このブログでは、既存の知識に基づいて Java での例外処理をまとめます. 以下のブログは、個人的な学習プロセスの要約にすぎません. すべてのブロガーの役に立てば幸いです.
このブログでは、Java の例外の理解と、Java での例外のキャプチャー方法について簡単に紹介しますが、自分自身の概要のみを作成し、後で詳細な調査を行って補足的な修正を行います。

例外を理解する

いわゆる例外とは、プログラムが実行時にエラーに遭遇したときに呼び出し元に通知するためのメカニズムを指します. 最も重要な側面の 1 つは、問題が発生した場合に、プログラムが通常のパスをたどることを許可しないことです. 別の利点エラー処理コードの複雑さを軽減する傾向があるということです

範囲外の配列の例外 Null
ここに画像の説明を挿入
ポインタの例外
ここに画像の説明を挿入
...

例外をキャッチする方法

予備知識:
例外がどのようにキャッチされるかを理解するには、まず保護された領域の概念を理解する必要があります。これは、例外を生成する可能性のあるコードの一部であり、これらの例外を処理するコードはすぐに続きます。

Java 例外処理には、try、catch、finally、throw、throws の 5 つのキーワードが含まれます。

  • try ブロック: コードを監視し、例外が発生する可能性のあるコードをその中に入れ、例外が発生した場合、コードの実行を停止し、例外をスローするために使用します
try{
    
    
	//此处放置可能出现异常的代码
}
  • Catch ブロック: 例外をキャッチし、try ステートメント ブロックでスローされた例外をキャッチして処理するために使用されます。try ステートメント ブロックは、try ステートメント ブロックの直後に続く必要があります。各 catch 句は、特殊な型パラメーター メソッドを 1 つだけ受け取るように見えます。
try{
    
    
	//此处放置可能出现异常的代码
}catch(Type1 id1){
    
    
	//处理Type1异常
}catch(Type2 id2){
    
    
	//处理Type12异常
}...
  • finally: 主に、try ステートメント ブロック内のリソース (データベース接続接続、ネットワーク接続ソケット、IO など) を再利用するために使用されます。try ステートメント ブロックに戻りがある場合、finally ステートメント ブロックは常に実行されます。 catch ステートメント ブロック、および finally ステートメント ブロック ステートメントは、常に finally ステートメント ブロックで戻り値を返します。
  • throw: catch ステートメントで使用され、例外をスローし、処理のために上位レベルにスローします。
  • throws: メソッド宣言で使用すると、例外がスローされることを意味します

例外の処理方法

例外は多種多様であるため、例外はさまざまなビジネス シナリオに従って処理されます。

  • 重大な異常な問題 (銀行のオンライン決済シナリオなど) の場合、プログラムを直接クラッシュさせて、より深刻な結果を防ぐ
  • 一般的な異常な問題 (ほとんどの場合) については、エラー ログを印刷することができ、監視アラームを通じてエンジニアに適時に通知することができます。
  • 回復可能な例外 (ネットワーク伝送関連のシナリオ) の場合、再試行操作を試行できます

ほとんどの場合、2番目の方法を実装します. ログの内容は、異常なメソッドの呼び出し情報であるため、異常な場所をすばやく特定できます. メソッドコールスタック: JVMには「仮想」と呼ばれるメモリスペースがあります
.メソッド間の呼び出し関係を格納するために特別に使用される「マシンスタック」 コードで例外が発生した場合、 e.printStackTrace() を使用して、例外が発生したメソッド呼び出しの場所を確認できます。

例外処理プロセス

  1. プログラムは最初に try ステートメント ブロックを実行します。
  2. try ブロック内のコードに例外があった場合、try ブロックを飛び出して、以下の例外と同じタイプの catch ステートメントがあるかどうかをチェックします. 2.1. 一致が見つかった場合、catch ステートメント
    ブロック2.2 が実行されます
    . 一致が見つからない場合、例外は外側に渡されます。つまり、メソッド呼び出しの上位レベルの呼び出し元に渡されます
    。 2.4. main メソッド
    一致する例外がなくなるまで、処理のために JVM に渡されます. この時点でプログラムは異常終了します.
  3. 一致する例外タイプが最終的に見つかるかどうかに関係なく、finally のコードはメソッドの終了前に実行されます。

Java 例外階層

Java には、さまざまな状況での例外を表す豊富な組み込みの例外システムがあります。
ここに画像の説明を挿入

  • 最上位クラスの Throwable は、Error、Exception の 2 つのサブクラスを派生させます。
  • エラーとは、Java 実行時の内部エラーとリソース消費エラーを指します. プログラムはそのような例外をスローしません. この種の例外システムはそれを解決できません. ユーザーに通知してプログラムを終了させるだけです.
  • 例外は、プログラムの作成に使用されるすべての例外クラスの親クラスです
  • Exception の下に RunTimeException というサブクラスがあり、そこから多くの一般的な例外クラスが派生します。

Java では、Error および RuntimeException から派生する例外は非チェック例外/実行時例外であり、それ以外はチェック例外/コンパイル時例外であると規定されています。

非チェック例外 (ここでは RuntimeException を指します): 一般に、null ポインター例外、配列範囲外、型変換例外など、コードまたはプログラム エラーを慎重にチェックしないことによって発生する例外は、コードの記述によって発生します。エラー. これらの例外は、コーディング プロセス中に発生することを回避できます。

チェック例外: 通常、コード プログラミングとは関係ありませんが、ファイルへのアクセスなど、プログラムが実行される環境に関連しますが、ファイルは存在しません。これ自体はプログラムの問題とはほとんど関係ありません。

非チェック例外とチェック例外の違い:

  • 未チェックの例外、RuntimeException クラスとそのサブクラス (および派生クラス) に属するクラスは、実行時にエラーを報告します。
  • 例外のスコープ内のチェック済み例外、非チェック済み例外を除くすべてのクラスはチェック済み例外であり、例外はコンパイル時にスローされます
  • コードの一部がチェック例外をスローする可能性がある場合は、明示的に処理する必要があります。{…}catch{…} を試行するか、上位層にスローします。

上記はJavaの例外の知識ポイントのまとめです. その後の学習の深化に伴い, 内容は同期的に補足および変更されます. すべてのブロガーの助けになることは非常に光栄です. 修正してください.

おすすめ

転載: blog.csdn.net/m0_46233999/article/details/117740695