[TIL]JAVA-異常処理


💡Day 18異常処理


この文章は南宮星のjava定式3/eをもとに学習内容を整理した文章です.
クリーンアップソース:https://github.com/qudalsrnt3x/javaStandard

▼▼プログラムエラー


開発に誤りが出るのは当然だ.エラーが発生したので、どこが間違っているのかチェックできます.
プログラムの実行中に、何らかの原因で誤操作や異常終了を招くことがあります.この結果の原因をプログラムエラーまたはエラーと呼ぶ.
コンパイルエラーコンパイル時に発生したエラー
ランタイムエラー
論理は間違っているが,行為と意図は異なる.
Javaで作成された構文に合致しないコードは、コンパイラによってコンパイルエラー(compiletimeerror)としてフィルタリングされますが、例外的にコンパイルはよくできていますが、実行時に発生します.

例外クラス階層



  • Exceptionクラスとそのサブクラス-コンパイラチェック例外処理사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외

  • RuntimeExceptionおよびその子-コンパイラ検査異常処理X주로 프로그래머의 실수에 의해서 발생하는 예외
  • ▼▼異常処理


    例外処理は、プログラムを実行するときに発生する可能性のある予期せぬ例外のコードを記述します.
    プログラムの予期せぬ終了を防止し、正常な動作を維持することを目的としています.

    try-catch文

  • try blockの異常、
  • と異常に一致するcatch block
  • があるかどうかを確認します.
  • に一致するcatch blockがある場合は、そのcatch block内の文を実行し、catch文を終了して次の文を実行します.一致するcatch文が見つからない場合は、例外を処理できません.
  • public class ExceptionEx5 {
        public static void main(String[] args) {
            System.out.println(1);
            System.out.println(2);
    
            try {
                System.out.println(3);
                System.out.println(0 / 0);
                System.out.println(4); // 실행되지 않는다.
                // try블럭에서 예외가 발생하면, 예외가 발생한 위치 이후에 있는 try블럭의 문장들은 수행되지 않는다.
            } catch (ArithmeticException e) {
                System.out.println(5);
            }
            System.out.println(6);
        }
    }
    実行結果
    1
    2
    3
    5
    6
    try blockに異常が発生した場合、異常発生位置後のtry blockの文は実行されません.
  • try blockに異常はなく、
  • catch blockを経ずにtry-catchゲート全体から出て実行を続けます.
  • public class ExceptionEx4 {
        public static void main(String[] args) {
            System.out.println(1);
            System.out.println(2);
    
            try {
                System.out.println(3);
                System.out.println(4);
    
            } catch (Exception e) {
                System.out.println(5); // 실행되지 않는다.
            }
    
            System.out.println(6);
        }
    }
    実行結果
    1
    2
    3
    4
    6

    アレイの例外処理

    public class Main {
    	public static void main(String[] args) {
        
        	String[] fruits = {"사과", "배", "포도"};
            
            for(int i=0;i<5, i++)
            	System.out.println(fruits[i]);
    	)
    }
    配列要素のコードには、配列サイズより大きいインデックスでアクセスします.コンパイル時は問題ありませんが、実行時
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    	at day18.ExceptionTest1.main(ExceptionTest1.java:13)
    ArrayIndexOutOfBoundsException異常.
  • 異常を処理するために、異常が発生する可能性のあるコードをtry~catch文で囲む.
    catchセクションの()で、発生した例外クラスを参照するためのパラメータeを作成します.
  • NullPointExceptionが表示された場合は、catch()セクションでcatch(NullPointException e)を作成します.
    public class Main {
     	public static void main(String[] args) {
              String[] fruits = {"사과", "배", "포도"};
    
              try {
                  for(int i=0;i<5;i++)
                      System.out.println(fruits[i]);
              }catch(ArrayIndexOutOfBoundsException e) {
                  // 예외 처리 코드 작성
                  System.out.println("배열 인덱스 범위 초과.");
              }
    
              System.out.println("###반드시 실행되어야 할 코드###");
    
    	}
    }
    実行結果
    사과
    배
    포도
    배열 인덱스 범위 초과됐어요! 확인해보세요!
    ###반드시 실행되어야 할 코드###

    printStackTrace()とgetMessage()

  • 異常が発生した場合に生成される異常クラスインスタンスには、異常発生に関する情報が含まれます.
  • printStackTrace()例外発生時に呼び出されるスタック内のメソッドの情報と例外メッセージを画面に出力
    getMethod()例外クラスインスタンスに格納されているメッセージを取得できます.
    public class ExceptionEx8 {
        public static void main(String[] args) {
            System.out.println(1);
            System.out.println(2);
    
            try {
                System.out.println(3);
                System.out.println(0 / 0);
                System.out.println(4);
            } catch (ArithmeticException arithmeticException) {
                arithmeticException.printStackTrace(); // 참조변수 arithmeticException 인스턴스에 접근할 수 있다.
                System.out.println("예외 메시지 : " + arithmeticException.getMessage());
            }
            System.out.println(6);
        }
    }
    実行結果
    1
    2
    3
    예외 메시지 : / by zero
    java.lang.ArithmeticException: / by zero
    	at Chapter08.day18.ExceptionEx8.main(ExceptionEx8.java:10)
    6

    異常をきたす


    まず、演算子newを使用して、励起する例外クラスのオブジェクトを作成します.Exception e = new Exception("고의로 발생시켰음");
  • キーワードthrowを使用して異常が発生しました.throw e;
  • シングル書き込み:throw new Exception("고의로 발생시켰음");🚩ソース
    例外クラス階層:https://joswlv.github.io/2018/10/29/java_exception/