[Java]例外処理の概要



Javaによる定式学習の内容をまとめた.

1.プログラムエラー


プログラムが実行中に何らかの理由で誤操作や異常終了する場合があります.
この結果の原因をプログラムエラーまたはエラーと呼ぶ.
エラーの種類は3種類あります.
コンパイルエラーコンパイル時に発生したエラー
ランタイムエラー
論理は間違っているが,行為と意図は異なる.
コンパイルエラーは、コンパイラが教えてくれたすべてのエラーを変更することでコンパイルを正常に完了します.
ただし、実行時にエラーが発生しないという意味ではありません.
ランタイムエラーを回避するには、プログラムの実行中に発生する可能性のあるすべての状況の数を考慮し、比較する必要があります.
Javaはランタイムエラーを2つに分類します.
Errorプログラムコードでは修正できない重大なエラー
Exceptionプログラムコードによる軽微なエラー

2.異常クラスの階層



Javaは、ErrorとExceptionをクラスとして定義します.
ErrorとExceptionもObjectクラスのサブクラスです.
例外クラスは2つのグループに分けられます.
  • Exceptionクラスとサブクラス(RuntimeExceptionを除く)
  • RuntimeExceptionクラスおよびその子孫
  • RuntimeExceptionクラスは、主にプログラマーがエラーによって発生する可能性のある例外です.
    Exceptionクラスは外部の影響によって生成され,通常はユーザの動作によって引き起こされる.

    3.処理異常-try,catch,finally


    異常処理とは?
  • プログラムの実行時に発生する可能性のある異常に対応するためにコードを記述する
  • 異常処理の目的は、プログラム異常終了を防止し、正常な運転状態を維持することである.
  • 3-1. try, catch


    例外処理のためにtry-catch文を使用します.
    try{
    	// 예외가 발생할 가능성이 있는 코드를 작성한다.
    }
    catch (Exception e){
    	// 예외가 발생했을 경우 이를 처리하기 위한 코드를 작성한다.
    }
    1つのメソッドでは、複数のtry-catch文を使用できます.
    try文とcatch文では、別のtry-catch文も使用できます.catch문 안에서 또 다른 try-catch문이 포함될 경우 같은 이름의 참조변수를 사용해서는 안된다.

    3-2. try-catch文フロー


    try blockで異常発生
  • と異常に一致するcatch block
  • があるかどうかを確認します.
    一致するcatch blockが存在する場合、そのcatch blockのコードが実行される.
  • が完了するとtry-catch文を終了し、次の
  • を実行します.
  • に一致するcatch文がない場合、例外を処理できず、
  • を終了します.
    try blockに異常がなければ
  • catch blockを通らずにtry-catch文全体を飛び出すことができます
  • 3-3. 例外クラスのメソッド


    例外クラスのインスタンスには、発生した例外に関する情報が含まれます.
    printStackTrace()例外が発生したときに呼び出されるスタック内のメソッドの情報と例外メッセージを画面に出力します.
    getMessage()例外クラスインスタンスに格納されているメッセージを取得できます.
    class ExceptionEx08 {
    	public static void main(String args[]) {
    		try {
    			System.out.println(0/0); // ArithmeticException 예외 발생
    		} catch (ArithmeticException ae)	{
    			ae.printStackTrace();
    			System.out.println("예외메시지 : " + ae.getMessage());
    		}
    	}
    }

    3-4. finally


    finally blockは、異常が発生するかどうかにかかわらず実行すべきコードを含むために使用されます.
    try{
    	// 예외가 발생할 가능성이 있는 코드 작성
    }
    catch (Exception e){
    	// 예외 처리를 위한 코드 작성
    }
    finally{
    	// 예외 발생 여부와 관계없이 항상 수행되어야하는 코드 작성
            // try-catch문의 마지막에 위치
    }
    異常が発生した場合はtry→catch→finally順に運転します
    異常がない場合はtry→finally順に運転します
    try blockでreturn文を実行してもfinally blockの文は先に実行され、メソッドを終了します.
    catch文でもそうです.

    4.処理異常2-throws


    try-catch文のほかに、メソッドに例外を宣言するメソッドもあります.
    例外を排除することです.
    メソッドに例外を宣言するには、宣言セクションでキーワードthrowsを使用して発生する可能性のある例外を記録します.
    複数の例外がある場合は、カンマで区切ります.
    void method() throws Exception1, Exception2 .... {
    // 메서드 내용
    }
    Exceptionクラスをメソッドに宣言すると、そのメソッドにすべてのタイプの例外が発生する可能性があります.
    Exceptionクラスは例外クラスの最高祖先クラスであるため、出産タイプの例外も発生する可能性があります.
    overridingを行う場合は、宣言された例外数ではなく、継承関係を考慮する必要があります.
    これにより、メソッドの作成時にJavaは宣言でメソッドに発生する可能性のある例外を指摘します.
    堅牢なプログラムコードを作成するのに役立ちます.これは、処理を強制するためです.
    上述したように、throwsを指定することは、例外を処理するのではなく、例外を呼び出しに転嫁する方法である.
    このようにして、最後のプライマリメソッドに遭遇するまで、メソッドに従って例外を伝達し続けます.
    例外を処理しないと、プログラムは異常に終了します.
    最後にtry-catch文を使用して例外を処理する必要があります.
    throwsを使用して、複数の方法で例外を分担して処理できます.