자바의 정석 - 예외 처리하기. try-catch

Yohan·2024년 1월 30일
0

예외처리

try {
	// 예외가 발생할 가능성이 있는 문장
} catch (Exception1 e1) {
	// Exception1이 발생했을 때, 이를 처리하기 위한 문장
} catch (Exception2 e2) {
	// Exception2이 발생했을 때, 이를 처리하기 위한 문장
} catch (ExceptionN eN) {
	// ExceptionN이 발생했을 때, 이를 처리하기 위한 문장
}

  1. try 블럭 내에서 예외가 발생한 경우
    (1) 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.
    (2) 일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행.
    만일 일치하는 catch블럭을 찾지못하면 예외는 처리되지 못한다.
    -> 프로그램 종료 (비정상적인 종료)
  2. try 블럭 내에서 예외가 발생하지 않은 경우
    (1) catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.
  • 예외 발생 X , 1 2 3 5 출력
public class Ex {
	public static void main(String[] args) {
		System.out.println(1);
		try {
			System.out.println(2);
			System.out.println(3);
		} catch (Exception e) {
			System.out.println(4);
		}
		System.out.println(5);
	}

}
  • 예외 발생 O, 1 3 4 출력
public class Ex {
	public static void main(String[] args) {
		System.out.println(1);
		try {
			System.out.println(0/0); // 예외 발생
			System.out.println(2);
		} catch (ArithmeticException ae) {
			System.out.println(3);
		}
		System.out.println(4);
	}

}

예외의 발생과 catch블럭

  • 예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감
  • 일치하는 catch블럭이 없으면, 예외는 처리안됨
  • Exception이 선언된 catch블럭은 모든 예외 처리(마지막 catch블럭)
public class Ex {
	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 ae) {
        	if (ae instanceof ArithmeticException)
            	System.out.println("true");
			System.out.println("ArithmeticException");
		} catch (Exception e) {
        	System.out.println("Exception");	
        }
		System.out.println(6);
	}
}
// 1 2 3 ture ArithmeticException 6 출력
  • 예외가 처리되면 try-catch문 빠져나감! (그 다음 catch문부터는 실행되지 않는다는 말)

public class Ex {
	public static void main(String[] args) {
		System.out.println(1);
        System.out.println(2);
		try {
        	System.out.println(3);
			System.out.println(args[0]); // 예외 발생
			System.out.println(4);
		} catch (ArithmeticException ae) {
        	if (ae instanceof ArithmeticException)
            	System.out.println("true");
			System.out.println("ArithmeticException");
        }
		System.out.println(6);
	}
}
// 1 2 3 출력후 비정상적 종료(6은 출력 x, catch문으로 예외를 해결하지 못했기 때문에)
profile
백엔드 개발자

0개의 댓글