nme.kr

문서의 이전 판입니다!


Ch.11 예외처리

예외처리

try ~catch문의 구조

try {
    // 예외가 발생할 가능성이 있는 문장 코드
} catch (Exception1 e1) {
    // Exception1이 발생할 경우, 실행될 문장
} catch (Exception1 e2) {
    // Exception2이 발생할 경우, 실행될 문장
...
} catch (ExceptionX eX){
    // ExceptionX가 발생할 경우, 실행될 문장
}

package chapter11;

public class ExceptionEx0 {

	public static void main(String[] args) {
		System.out.println(1);
		System.out.println(2);
		System.out.println(3/0);
		System.out.println(4);
		System.out.println(5);
		System.out.println(6);
	}
	
}

package chapter11;

public class ExceptionEx {

	public static void main(String[] args) {
		System.out.println(1);
		try {
			System.out.println(2);
			System.out.println(3/0);
			System.out.println(4);
		} catch(ArithmeticException e) {
			System.out.println(5);
		}
		System.out.println(6);
	}
	
}

try 블록 안에서 예외가 발생한 경우
- 발생한 예외와 일치하는 catch 문이 있는지 확인한다.
- 만약 일치하는 catch문이 있다면, 해당 catch문의 블럭 내의 실행문을 실행하고 전체 try-catch 구문이 종료된다. 만약 일치하는 catch문이 없으면 예외 처리를 하지 못한다.
try 블록 안에서 예외가 발생하지 않은 경우
- catch 구문을 모두 확인하지 않고, 전체 try-catch 구문이 종료된다.

package chapter11;

public class ExceptionEx2 {

	public static void main(String[] args) {
		System.out.println(1);
		try {
			System.out.println(2);
			System.out.println(3);
			System.out.println(4);
		} catch(ArithmeticException e) {
			System.out.println(5); // Death 코드 (실행될 일이 없다)
		}
		System.out.println(6);
	}
	
}

:wr:다중 catch문

package chapter11;

public class ExceptionEx4 {

	public static void main(String[] args) {
		
		try {
			int[] arr = {1,2,3};
			System.out.println(arr[2]);
			System.out.println(3/1);
			Integer.parseInt("a");
		} catch(ArithmeticException e) {
			System.out.println("0으로 나눌 수 없음");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("인덱스 범위 초과");
		}
	}
	
}

catch 문의 배치 순서
자식 Exception > Exception 순으로 배치

:wr:finally문

package chapter11;

public class ExceptionEx3 {

	public static void main(String[] args) {
		System.out.println("DB연결 시작");
		try {
			System.out.println("DB작업");
			System.out.println(3/0);
		} catch(Exception e) {
			System.out.println("DB작업 중 예외발생");
		} finally {
			System.out.println("DB연결 종료");
		}
	}
	
}

예외 강제 발생

throw 키워드 사용
throw new Exception( “ 예외 발생 ”);

package chapter11;

public class ExceptionEx5 {

	public static void main(String[] args) {
		System.out.println("프로그램 시작");
		try {
			throw new Exception("예외 발생");
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		System.out.println("프로그램 종료");
	}
	
}

예외 떠넘기기


:wr:예외 재발생


11.6 사용자 정의 예외 클래스