異常クラス(try~catch、throws)

2521 ワード

エラーと例外

  • プログラムが実行中に何らかの原因でエラーや異常終了が発生した場合、
  • コンパイルエラー
  • Javaコンパイラエラー、構文、データ型チェックなどのエラー休暇
  • ランタイムエラー
  • プログラムの実行中に発生したエラー
  • エラーの結果出力と異常なプログラムは
  • を閉じます.
  • エラー:メモリ不足とスタックオーバーフロー(リカバリできない重大なエラー)
  • 例外:正しいコードは異常終了
  • を防止することができる.

    例外処理構文

  • try~catchゲート
  • try {
       // 예외 발생 가능성 코드
       실행코드 1
       실행코드 2
       실행코드 3
       
    } catch (예외 클래스1 e1) {
       // 예외 클래스1의 예외가 발생하는 경우 실행될 코드
       실행코드 4
    } catch (예외 클래스2 e2) {
       // 예외 클래스2의 예외가 발생하는 경우 실행될 코드
       실행코드 5
       
    } finally {
       // 예외 발생 여부와 상관없이 무조건 실행되는 코드
       실행코드 6
    }
    実行可能なコードが1行
  • のみであっても、括弧
  • を省略することはできない.
  • 実行コード2における異常クラス1の実行順序
  • 1, 2, 4, 5
  • 異常が発生していない場合の実行手順
  • 1, 2, 3, 6
  • 例外処理例

  • 元3/0がエラーであったため、異常処理1が実行される.
  • 3/0を3/1(真の変更)に変更し、配列エラーが発生したため、例外処理2が実行されます.
  • public class ExceptionEx {
       
       public static void main(String[] args) {
          System.out.println("프로그램 시작");
          try {
             // System.out.println(3/0);
             System.out.println(3/1);
             int[] arr = new int[2];
             System.out.println(arr[2]);
             
          } catch (ArithmeticException e) {
             System.out.println("예외발생");
          } catch (ArrayIndexOutOfBoundsException e) {
             System.out.println("배열 에러");
          
          } finally {
             System.out.println("finally");
          }
          
          System.out.println("프로그램 끝");
       }
    }
  • 異常処理は難しい場合がありますので、catch文を最高レベルのExceptionに変換して一度だけ使用できます.
  • public class ExceptionEx {
       
       public static void main(String[] args) {
          System.out.println("프로그램 시작");
          try {
             // System.out.println(3/0);
             System.out.println(3/1);
             int[] arr = new int[2];
             System.out.println(arr[2]);
             
          } catch (Exception e) {
             System.out.println("예외발생");
          
          } finally {
             System.out.println("finally");
          }
          
          System.out.println("프로그램 끝");
       }
    }

    遅延異常処理

    // 메서드 A
    void 메서드A() throws 예외클래스명... {
       ...
    }
    
    // 메서드 B
    void 메서드B () {
       try {
          메서드A();  // 메서드 A 호출
       } catch (예외 클래스명 e) {
          예외 처리;
       }
    }
  • メソッドAを実行するメソッドBは、例外処理を実行する.
  • メソッドBが異常処理を行う場合、エラー
  • が発生する.

    例外を強制的に実行する方法

    throw new 예외 클래스명("문자열");