Javaでの例外処理と分類

異常:ファイルが見つからない、ネットワーク接続の失敗、不正なパラメータなど、さまざまな予期しない状態を指します。例外は、プログラムの実行中に発生し、通常の命令フローを妨げるイベントです。Javaは、APIのThrowableクラスの多くのサブクラスを通じて、さまざまな異なる例外を記述します。したがって、Java例外はすべてのオブジェクトであり、コードの一部に現れるエラー状態を記述するThrowableサブクラスのインスタンスです。条件が生成されると、エラーによって例外が発生します。

1.異常分類

ここに画像の説明を挿入

Throwableは、Java言語のすべてのエラーまたは例外のスーパークラスです。次のレイヤーはエラーと例外に分かれています

1. Errorクラスは、Javaランタイムシステムの内部エラーおよびリソース枯渇エラーを参照します。アプリケーションはこのタイプのオブジェクトをスローしません。このようなエラーが発生した場合は、ユーザーに通知するだけでなく、プログラムを安全に終了させるだけです。

エラー:プログラムが処理できないエラーです。これは、アプリケーションの実行に重大な問題があることを意味します。ほとんどのエラーは、コードライターによって実行されるアクションとは関係ありませんが、コードの実行中のJVM(Java仮想マシン)の問題を表しています。たとえば、Java仮想マシンの実行エラー(Virtual MachineError)の場合、JVMに操作を続行するために必要なメモリリソースがなくなると、OutOfMemoryErrorが発生します。これらの例外が発生すると、Java仮想マシン(JVM)は通常スレッドの終了を選択します

2.例外には2つのブランチがあります。1つはNullPointerExceptionやClassCastExceptionなどのRuntimeExceptionで、もう1つはI / Oエラーによって引き起こされるIOExceptionやSQLExceptionなどのCheckedExceptionです。

ランタイム例外:NullPointerException(nullポインター例外)、IndexOutOfBoundsException(添え字の範囲外例外)など、RuntimeExceptionクラスとそのサブクラスのすべての例外。これらの例外はチェックされず、プログラムはキャプチャと処理を選択できます。それかどうか。これらの例外は通常、プログラムの論理エラーによって引き起こされます。プログラムは、論理的な観点から、このような例外を可能な限り回避する必要があります。

ランタイム例外の機能は、Javaコンパイラがそれをチェックしないことです。つまり、このタイプの例外がプログラムで発生する可能性がある場合、try-catchステートメントでキャッチされなかったり、throws句でスローされたりしなくても、コンパイルが渡されます。

非実行時例外(コンパイル例外):これは、Exceptionクラスとそのサブクラスに属するRuntimeException以外の例外です。プログラム構文の観点から、処理しなければならないのは例外であり、処理しないとプログラムをコンパイルできません。IOException、SQLExceptionなどおよびユーザー定義の例外例外は、通常、チェック例外をカスタマイズしません。

2.例外処理

1.問題が発生した場合、特定の処理は実行されませんが、呼び出し元に
 例外スローされ続けます。1つはスロー、1つはスロー、もう1つはシステムによって自動的にスローされる3つの形式があります。

注:
 スローとスローの違い:

(1)異なる位置:スローは関数で使用され、その後に例外クラスが続き、その後に複数が続く場合があります。一方、スローは関数で使用され、その後に例外オブジェクトが続きます。
(2)さまざまな関数:throwは例外を宣言するために使用されるため、呼び出し元は関数の考えられる問題のみを認識し、前処理メソッドを提供できます。throwは特定の問題オブジェクトをスローし、実行してthrowを実行すると、関数は終了します。呼び出し元にジャンプし、特定の問題オブジェクトを呼び出し元にスローします。つまり、throwステートメントが独立して存在する場合、他のステートメントは実行できないため、以下で定義しないでください。
(3)Throwsは例外の可能性を表し、これらの例外は必ずしも発生しません。throwは例外をスローすることを意味し、throwを実行すると何らかの例外オブジェクトがスローされる必要があります。
(4)どちらも例外を処理する受動的な方法であり(ここでの否定性は、この方法が適切でないことを意味するわけではありません)、例外をスローするかスローする可能性がありますが、関数は例外を処理せず、実際の例外は関数によって処理されます。レイヤー呼び出し処理。

2.対象を絞った処理方法:例外をキャッチ

Try{
    
    
//有可能发生异常的代码
}
 Catch(异常类 变量)
{
    
    
// 处理异常的代码,捕获
}
finally{
    
    
//一定会被执行的代码
}


3つ目は、RuntimeExceptionとCheckedExceptionの違いです。

1.
  RuntimeExceptionとCheckedExceptionの違いRuntimeException:メソッドを定義するときに、RuntimeExceptionがスローされることを宣言する必要はなく、このメソッドを呼び出すときにこのRuntimeExceptionをキャッチする必要もありません。つまり、チェックされていない例外を試す必要はありません。 ...キャッチ...または処理するメカニズムをスローします。
  
  CheckedException:メソッドを定義するときは、スローされる可能性のあるすべての例外を宣言する必要があります。このメソッドを呼び出すときは、チェックされた例外をキャッチするか、渡す必要があります。
  
  つまり、メソッドは、スローされる可能性のあるすべてのチェック済み例外を宣言する必要があります。チェックされていない例外は、制御不能(Error)であるか、回避する必要があります(RuntimeException)。メソッドが発生する可能性のあるすべてのチェック済み例外を宣言していない場合、コンパイラはエラーメッセージを表示します。

おすすめ

転載: blog.csdn.net/weixin_49005845/article/details/110872695