工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java複数例外処理のマスター:単一catchブロックで複数例外を捕捉

Java複数例外処理のマスター

単一catchブロックで複数例外を捕捉し、コードを合理化、よくある落とし穴を回避する方法を習得。

Java 7以前、開発者は例外タイプごとに別個のcatchブロックを書く必要があり、処理ロジックが同一でも重複コードが生じていました。

以下のシナリオを考えてみましょう。

例1:別々のcatchブロック

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (ArithmeticException e) { System.out.println(e.getMessage()); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } 

出力

/ by zero

この例では2つの異なる問題が発生し得ます:

両catchブロックが同一アクションを実行し、コード重複を招いています。


単一ブロックでの複数例外捕捉

Java SE 7以降、パイプ(|)区切りで複数例外タイプを1つのcatchブロックに結合可能です。

構文:

try { // code } catch (ExceptionType1 | ExceptionType2 ex) { // handler } 

例2:マルチcatchブロック

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } 

出力

/ by zero

ハンドラを統合することで、コードがクリーンになり、バイトコードが小さくなり、保守が容易になります。

注意:マルチcatchではパラメータが暗黙的にfinalになるため、再代入不可。


基底例外クラスの使用

捕捉対象の複数例外が共通の祖先を持つ場合、各サブクラスを列挙する代わりにその祖先を捕捉できます。

例3:基底Exceptionクラスの捕捉

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (Exception e) { System.out.println(e.getMessage()); } } } 

出力

/ by zero

Javaのすべての具象例外はExceptionを継承するため、この単一catchブロックで上記すべてのシナリオを処理できます。


基底例外が既に捕捉されている場合、同じcatchにサブクラスを含めるとコンパイルエラーになります。

例4:基底と子例外の無効な組み合わせ

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } 

出力

Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing

このエラーは、ArithmeticExceptionとArrayIndexOutOfBoundsExceptionがExceptionのサブクラスであるため、言語ルールに違反するため発生します。

Java

  1. Java演算子をマスター:種類、構文、実践例
  2. Javaコメント:種類、使い方、ベストプラクティス
  3. Java拡張forループをマスター:構文、例、ベストプラクティス
  4. Java文字列をマスター:生成、メソッド、ベストプラクティス
  5. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  6. Java無名インナークラス完全ガイド:定義、構文、実践例
  7. Java例外ハンドリング実践:try-catch-finallyとリソース管理
  8. Java throw vs throws:実践例でマスターする例外ハンドリング
  9. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  10. Javaアノテーション完全ガイド:種類、配置場所、実践例
  11. Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上