[AVA学習]9週間:異常処理

6809 ワード

勉強する

  • javaにおける異常処理方法(try,catch,throw,throws,finally)
  • Javaが提供する例外階層
  • ExceptionとErrorの違いは?
  • RuntimeExceptionと非REの違いは何ですか?
  • カスタム例外メソッド
  • まず理解する


    JAvaエラー

  • コンパイルエラー
    -コンパイル中に発生したエラー
  • Javaコンパイラは、構文チェックによってエラーを修正します.
  • ランタイムエラー
    -実行中に発生したエラー
  • Javaは、ランタイムエラーを例外エラーとエラーエラーの2つに分類します.
  • 例外とエラー

  • 例外
    -発生時のコードを事前に定義することで、プログラマはそれを制御できます.
  • エラー
    -メモリ不足やスタックオーバーフローなど、JVMやハードウェアなどのインフラストラクチャで問題が発生
  • プログラマーはこれを処理できないので、最初から発生しないようにします.
  • 異常処理とは?

  • プログラムに異常が発生した場合、プログラムが突然終了し、正常に動作しないようにコードで処理されます.

    1.Javaの例外処理方法とテクニック(try、catch、throw、throws、finally)


    1) try - catch

    <try-catch>문의 기본 구조
    
    try {
    ...
    } catch (예외1) {
    ...
    } catch (예외2) {
    ....
    } finally {
    	System.out.println("이건 반드시 실행되어야 합니다.");
    }
  • try文で実行する文に異常がない場合、catch文以降の文は実行されません.
  • try文の文を実行するときに、例外が発生した場合、対応するcatch文を実行します.
  • 2) finally

  • try-catchを併用し、異常が発生した場合に実行すべき部分がある場合はブロック
  • を用いることができる.
  • に異常が発生したかどうかにかかわらず、実行する内容があれば使用できます.
  • 3) throw

  • プログラマが故意に異常を起こした場合に使用できるキーワード
  • <throw 사용 예시>
    
    if () {
    	throw new IllegalArgumentException("부적절한 이름입니다.");
        // throw new IllegalArgumentException 구문을 풀어 쓴 경우
        // IllegalArgumentException e = new IllegalArgumentException("부적절한 이름입니다.");
        // throw e;
        }

    4) throws

  • メソッドで例外を宣言するためのキーワード
  • メソッドの宣言部では例外を宣言し,メソッドを使用する人が行う必要がある異常処理に情報を提供し,異常処理を「押し上げる」.
  • この方法を使用する場合、使用者は放出された異常を処理しなければならない.
  • <throws 사용 예시>
    // 메소드 호출
    public static void main(String[] args) {
    	SayHello sayHello = new SayHello();
        
        try {
        	sayHello.sayHello();
        } catch (Exception1 e) {
        	System.out.println("예외가 발생하였습니다");
        }
    }
    
    // 메소드 선언
    public static void sayHello() throws Exception1, Exception2..ExceptionN {
    //....
    }

    2.Javaが提供する異常階層



    Throwableクラス

  • クラス
  • は、すべての例外およびエラークラスの祖先です.
  • の例外またはエラー情報を確認する方法があります.
    -getMessage():変換可能なオブジェクトの詳細を返します.
    -printStackTrace():異常またはエラーが発生するまでタイムラインを出力します.
    -tostring():変換可能なオブジェクトの短い情報
  • を返します.

    3.ExceptionとErrorの違い


    Exception

  • プログラムが実行中です.
  • プログラマが異常を処理するコードを記述することによって、このような状況を防止することができる.
  • プログラムで修復できる障害.
  • Error

  • 運転時に何らかの原因で異常が発生したり、故障や閉鎖が発生したりした場合、
  • .
  • プログラムで修復できない深刻な障害を指す.
  • は、通常のJVMやその他のハードウェアなどのシステムの問題によって発生します.
  • エラーが発生した場合、プログラムは異常に終了します.
  • 自動記憶、StackOverFlow、ThreadDeathなどがあります.
  • 運転時に発生し、予測不可能なUnchecked Errorに属する.コードを変更しないと問題を解決できません.
  • 4.Runtime Exceptionと非REの違い

  • JavaのExceptionクラスはRuntimeExceptionであり、それを継承するクラスはUnchecked Exceptionであり、その他のExceptionクラスのサブクラスはChecked Exceptionとすることができる.
  • 両者の違いを下表に示す.
  • Unchecked Exception

  • RuntimeExceptionを継承する例外を指します.
  • は、異常処理を強制しないことを明確にしている.
  • プログラムにエラーが発生した場合に発生することを意図します.
  • Checked Exception

  • RuntimeExceptionを継承しない例外を指す.
  • try-catch文またはthrowsを使用して呼び出したクラスに例外を投げ出す方法は、例外を処理する必要があります.
  • それ以外の場合、コンパイル中にエラーが発生します.

    5.カスタム例外の作成方法

  • のトップレベルExceptionを継承し、Checked Exceptionを実現します.
  • RuntimeExceptionを継承し、Unchecked Exceptionを実現します.
  • Checked Exceptionの例

    /*
    * 이것은 커스텀 CheckedException 입니다.
    * 자바의 기본 예외로 표현할 수 없는 예외를 제공하기 위해 만들어졌습니다. 
    * */
    public class CustomCheckedExceptionEx extends Exception {
    
        public CustomCheckedExceptionEx() {
        }
    
        public CustomCheckedExceptionEx(String message) {
            super(message);
        }
    
        public CustomCheckedExceptionEx(String message, Throwable cause) {
            super(message, cause);
        }
    
        public CustomCheckedExceptionEx(Throwable cause) {
            super(cause);
        }
    
        public CustomCheckedExceptionEx(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
            super(message, cause, enableSuppression, writableStackTrace);
        }
    }
    
    class CustomCheckedExceptionTest {
        public static void main(String[] args) throws CustomCheckedExceptionEx {
            try {
                // doSomething
            } catch (Exception e) {
                throw new CustomCheckedExceptionEx("커스텀 체크드 예외 발생!!", e);
            }
        }
    }

    Unchecked Exceptionの例

    public class CustomUncheckedException extends RuntimeException {
    
        public CustomUncheckedException() {
        }
    
        public CustomUncheckedException(String message) {
            super(message);
        }
    
        public CustomUncheckedException(String message, Throwable cause) {
            super(message, cause);
        }
    
        public CustomUncheckedException(Throwable cause) {
            super(cause);
        }
    
        public CustomUncheckedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
            super(message, cause, enableSuppression, writableStackTrace);
        }
    }
    
    class CustomUncheckedExceptionTest {
        public static void main(String[] args) {
            try {
                // doSomething
            } catch (RuntimeException e) {
                throw new CustomUncheckedException("커스텀 언체크드 예외 발생!!", e);
            }
        }
    }
    [注意]
    https://parkadd.tistory.com/69
    https://zannew.tistory.com/23
    https://velog.io/@zayson/%EB%B0%B1%EA%B8%B0%EC%84%A0%EB%8B%98%EA%B3%BC-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-Live-Study-9%EC%A3%BC%EC%B0%A8-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC
    https://youn12.tistory.com/32