Java には多くの例外があり、この例外メカニズムはプログラム内の不明なエラーの処理に役立ちます。例外処理に関しては、try catchブロック、throw、 throwsがあります。
1.投げる
throws メソッドでの例外の処理は、例外の宣言とも呼ばれ、問題を特定して呼び出し元に報告します。コンパイル時例外がメソッドの throw によってスローされたが、キャッチされて処理されない場合は、 throw によって宣言し、呼び出し元に処理させる必要があります。キーワード throws は、現在のメソッドが例外を処理しないことを示すためにメソッド宣言で使用されますが、呼び出し元に例外を処理する (例外をスローする) メソッドを思い出させます。
throws は例外クラスの宣言 に使用されます。メソッドに複数の例外がある場合は、throws の後にコンマで区切って複数の例外クラスを記述することができます。
1.1 ステートメントの形式
修飾子の戻り値の型メソッド名 () は例外クラス名 {} をスローします
1.2 コード
private void syncData(ProductBaseVo vo) throws JsonProcessingException { if (null != vo) { RabbitController.syncDataChange(JsonUtils.toJsonString(vo).getBytes(), RabbitConstants.FAN_EXCHANGE, null); } }
2.投げる
プログラムを書くときは、プログラムに問題が発生する状況を考慮する必要があります。たとえば、メソッドを定義する場合、メソッドはパラメータを受け取る必要があります。そして、呼び出し側のメソッドが受け取ったパラメータを使用する場合には、まずパラメータのデータに対して正当な判断を下す必要があり、データが正当でない場合には、呼び出し元に正当なデータを渡すように指示する必要があります。このとき、呼び出し元に通知するために例外をスローする必要があります。Java では、指定された例外オブジェクトをスローするために使用される throw キーワードが提供されます。
throw は、例外オブジェクトをスローし、例外オブジェクトを呼び出し元に渡し、現在のメソッドの実行を終了するメソッドで使用されます。
2.1 ステートメントの形式
修飾子の戻り値の型 メソッド名 (パラメータリスト) [スローする例外の型] {
if (判定条件) {
throw new ExceptionObject("例外の原因");
}
}
2.2 コード
public Boolean updateActivate(ProductDeviceBo bo) { if (null == bo) { throw new RuntimeException("デバイスのアクティブ化に失敗しました: deviceVo が null"); } if (org.apache.commons.lang3.StringUtils.isBlank(bo.getId( ))) { throw new RuntimeException("デバイスのアクティブ化に失敗しました: デバイス ID が null"); } if (null == bo.getActivateTime()) { throw new RuntimeException("デバイスのアクティブ化に失敗しました: アクティブ化時間が null") ; } log.info("デバイスのアクティベーション->デバイス id=" + bo.getId() + "; アクティベーション時間->" + bo.getActivateTime()); // ID がデータベースに存在するかどうかを確認します ProductDeviceVo vo = baseMapper.selectDeviceInfoById (bo.getId()); if (null == vo) { throw new RuntimeException("デバイスが存在しません"); } 戻りbaseMapper.updateActivate(bo.getId(), bo.getActivateTime()) > 0; }
3. トライキャッチ
try-catch は、コードセグメントの例外をキャッチして処理するために使用されます。
try-catch コード ブロックは 2 つのブロックに分かれており、最初のブロックは try{}、2 番目のブロックは catch (例外の参照) {} です。
try-catch は通常、ループの外側に配置されます。
try-catch、try は、スコープ全体を正常に通過できるかどうかを試し、不可能な場合は例外をスローすることです。したがって、例外をスローする可能性のあるプログラムセグメントは、try ブロックに配置されることがよくあります。そして、catch は、try でスローされた例外を処理します。catch のパラメータ リストは、throw でスローされた例外の参照である例外参照を受け取ります。
try-catch はネストできます。次に、try-catch のネストの例を示します。
---------------------------------------- 第一形態 -- ------------------------------------------------ -
try{ System.out.println("********************** 成功****************** ****"); }catch (Exception e){ System.out.println("**********************失敗しました****** *****************"); e.printStackTrace(); }
-----------------------------------------------第二形態- -------------------------------------------------- - ----------
試す{
System.out.println("********************** 成功******************** **");
}キャッチ (例外 e){
System.out.println("**********************失敗しました******************* **");
e.printStackTrace();
}ついに {
System.out.println("***********************innerfinally****************** * ***");
}
--------------------------------------第三形態-------- -----------------------------------------------
試す{
System.out.println("********************** 成功******************** **");
}ついに {
System.out.println("***********************innerfinally****************** * ***");
}
4. トライ・キャッチ、スロー、スローの違いと関連性
違い
1. Throw はアクション (例外をスローするアクション) を表し、throws は状態 (メソッドが例外をスローする可能性があること) を表します。
2. throws はメソッドの実装で使用され、throws はメソッドの宣言で使用されます。
3. throw は 1 種類の例外をスローするためにのみ使用できますが、throw は複数の例外をスローできます。
4. Throw は、try-catch-finally ステートメント ブロックまたは throws とともに使用できます。
5. スローは通常、単独で使用され、例外処理メソッドによってキャッチされます。
接続
try .... catch は、try の特定の操作で発生する可能性のある例外を catch を使用してキャッチし、処理することです。
throw は例外を処理しませんが、例外を直接スローします。Throw new Exception () は、他のメソッドによって処理される例外をスローします。
つまり、 try....catch は例外をキャッチするためのものであり、 throw は他の人がキャッチできるように例外をスローするためのものです。
メソッドで throws が使用されている場合、このメソッドは上向きに例外をスローします。このメソッドを呼び出すときは、この例外を処理するためにこの呼び出しを try...catch ブロックに入れる必要があります。
例外を処理するには 2 つの方法があります
1. 例外を宣言します。つまり、メソッド名の後に throws ExceptionName,... を追加すると、メソッド自体が例外をスローするだけで、関数の呼び出し元が例外をキャッチします。例外が発生した場合、例外はコールスタックに沿って一致する処理メソッドを見つけますが、コールスタックの最後まで到達しても見つからない場合は、例外が出力されてプログラムが終了します。
2. 例外をキャッチします。try catch メソッドを通じて、例外処理ステートメントが catch 句に配置されます。
連絡先 2:
例外がスローされる可能性のあるプログラム ブロックについては、try{} でラップし、catch を使用して例外をキャッチし、catch で例外を処理します。try で例外が発生した場合、プログラムは次の処理に進みます。中断ではなくキャッチ。
Try and catch はプログラムの実行中に発生した例外のみを取得できますが、throw ステートメントは明確な例外を引き起こす可能性があり、プログラムは throw ステートメントに到達するとすぐに停止し、後続のプログラムは実行されません。