チェックされた例外、チェックされていない例外、例外処理、アクティブに例外をスローする

1.例外の定義

例外は、プログラム実行中のプログラムの通常の実行を妨げるエラー操作です。Javaステートメントの実行中に例外が発生する限り、例外オブジェクトが作成されます。Throwableは、すべての例外の親クラスです。2つの直接サブクラスErrorとExceptionがあります。その中で、Exceptionは、チェック例外とランタイム例外(ランタイム例外)にさらに分類されます;エラーはシステムエラーを表し、通常は予期して回復することはできません。 (JVMのクラッシュ、メモリ不足など);チェックされた例外(チェックされた例外)はプログラムで予期され、修復する必要があります(FileNotFoundException例外をキャッチし、デバッグに役立つ情報と適切なログを提供する必要があるなど、例外はチェックされたすべての例外の親クラス);ランタイム例外はチェックされていない例外とも呼ばれます。たとえば、配列要素を取得する前に配列の長さを確認する必要があります。そうしないと、ArrayIndexOutOfBoundExceptionランタイム例外がスローされる可能性があります。RuntimeExceptionはすべてのランタイムの親クラスです。例外

未チェックの例外(RuntimeException):このタイプの例外は、プログラマーにとって論理的な問題であり、キャッチしたりスローしたりする必要はありません。プログラムは自動的に例外情報を入力します。一般的な例外には、NullPointerException、ClassCastException、ArrayIndexsOutOfBoundsException、および
チェックされた例外(RuntimeException以外)が含まれます。チェックされた例外は、義務ロジックを制御し、キャッチ内の例外によって引き起こされた問題を処理できます。一般的な例外は、Exception、FileNotFoundException、IOException、SQLExceptionです。
チェックされた例外とチェックされていない例外の違いは次のとおりです。呼び出し元が例外を処理するように強制される必要があるかどうか、呼び出し元が例外を処理するように強制される場合はチェックされた例外が使用され、そうでない場合はチェックされていない例外(RuntimeException)が選択されます

 

2.エラー与例外

エラーは、Javaランタイム環境の内部エラーまたはハードウェアの問題であるシステムレベルのエラーを表します。プログラムはそのような問題を処理することは期待できません。操作を終了する以外に選択肢はありません。Java仮想によってスローされます。機械。例外は、プログラムがキャッチして処理する必要がある例外を表します。これは、不完全なプログラム設計から発生し、プログラムで処理できる問題です。

 

3.例外処理

tryブロック:例外をキャッチするために使用されます。その後に0個以上のcatchブロックを続けることができます。catchブロックがない場合は、finallyブロックを続ける必要があります。
キャッチ ブロック:tryによってキャッチされた例外を処理するために使用されます。
finalブロック:例外がキャッチまたは処理されるかどうかに関係なく、finallyブロックのステートメントが実行されます。tryブロックまたはcatchブロックでreturnステートメントが検出されると、メソッドが戻る前にfinallyブロックが実行されます。

注:tryステートメントとfinallyステートメントの両方にreturnステートメントがある場合、finallyステートメントの内容はメソッドが戻る前に実行され、finallyステートメントの戻り値は元の戻り値を上書きします。次のように:

public class Test {
public static int f(int value){
try {
return value * value;
} final {
if(value == 2){
return 0;
}
}
f(2)が呼び出された場合、戻り値は0になります、finallyステートメントの戻り値がtryブロックの戻り値をオーバーライドするためです。

4.例外をスローします

throwsキーワードは通常、スローされる可能性のある例外を指定するメソッドを宣言するときに使用されます。複数の例外はコンマで区切ることができます。main関数でメソッドが呼び出されたときに、例外が発生すると、

指定された例外オブジェクトに例外をスローします

publiCクラスシュート{

static void Pop()はNegativeArraySizeException {をスローします

//メソッドを定義し、NegativeArraySizeExceptionをスローします

int [] arr = new int [-3]; //異常になる可能性があるように、長さが-3になるように配列を作成します

}

pub1ic static vo1d main(String [] args){

{を試してください。

ポップ() ​​;

} catch(NegativeArraySizeException exp){

System。out.println( "Pop()メソッドは例外をスローします。例外情報は次のとおりです。" + exp);

}

}

}

例外処理方法

Throwableクラスには3つの例外処理メソッドが定義されてい
ます。StringgetMessage()_は、このスロー可能オブジェクトの簡単な説明を返します。
String tostring()このスロー可能オブジェクトの詳細なメッセージ文字列を返します。
void printstackTrace()JVMは例外オブジェクトを出力します。このメソッドがデフォルトであり、出力される例外情報は最も包括的なものです。

複数の例外処理メソッド

1.複数の例外は個別に処理されます。
2.複数の例外が一度キャッチされ、複数回処理されます。

     1回の試行で複数のキャッチに関する注意:
     子と親の関係がある場合は、キャッチで定義された例外変数。次に、サブクラスの例外変数を上に書き込む必要があります

そうしないと、エラーが報告されます。3。複数の例外キャッチされ、一度処理されます。

{ int [] arr = {1,2,3};を試してください //システム。アウト 。println(arr [3]); // ArrayIndexOutOfBoundsException:3 List <Integer> list = List.of(1、2、3); システム。アウト 。println(list .get(3); // IndexoutOfBoundsException:インデックス3が長さ3の範囲外} catch(Exception e){ System .out .println (e); }







実行時例外がスローされた場合、それらは処理されない場合があります。キャプチャもスローを宣言もしません。
finallyにreturnステートメントがある場合は、この状況を回避するために、常にfinallyで結果を返します。
親クラスが複数の例外をスローする場合、サブクラスが親クラスメソッドをオーバーライドすると、親クラスまたは親クラスの例外サブクラスと同じ例外がスローされます。または例外をスローしません。
親クラスのメソッドは例外をスローしません。また、サブクラスが親クラスのメソッドをオーバーライドする場合、サブクラスは例外をスローできません。このとき、サブクラスは例外を生成します。例外はキャッチして処理することしかできず、スローするように宣言することはできません
。try/ catchの後に、finallyコードブロックを追加して、その中のコードを実行します。通常はリソース回復用。


 

おすすめ

転載: blog.csdn.net/weixin_51980491/article/details/112739191