Java의 정석 기초편(남궁성) 정리 + a/8 ~ 9. 예외처리, java.lang패키지와 유용한 클래스

예외처리 04 + 07 + 14 . 예외 처리하기 , printStackTrace( )와 getMessage( ) , finally블럭

doriver 2022. 11. 20. 20:44

예외처리(exception handling)

프로그램 실행시 발생할수 있는 예외에 대비한 코드를 작성하는것

예외의 발생으로 인한 실행중인 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는것

예외를 처리하기위해 try-catch문을 사용한다

 

try - catch문

예외가 발생하면, 발생한 예외에 해당하는 클래스의 인스턴스가 만들어진다.

예외가 발생한 문장이 try블럭에 포함되어있으면, catch블럭의 괄호()내에 선언된 참조변수가 이 인스턴스를 받게된다

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

하나의 try블럭 다음에는 여러종류의 예외를 처리할수 있도록, 하나 이상의 catch블럭이 올수 있다

이 중 발생한 예외의 종류와 일치하는 단 한개의 catch블럭만 수행된다.

발생한 예외의 종류와 일치하는 catch블럭이 없으면 예외는 처리되지 않는다.

 

모든 예외클래스는 Exception클래스의 자손이므로, catch블럭의 괄호()에 Exception클래스 타입의 참조변수를 선언해 놓으면 어떤종류의 예외가 발생하더라도 catch블럭에 의해 처리된다.

 

printStackTrace( )와 getMessage( )

예외가 발생했을때 생성되는 예외클래스의 인스턴스에는 발생한 예외에대한 정보가 담겨 있으며, getMessage()와 printStackTrace()를 통해 이 정보들을 얻을수 있다

try {
	~  ~
} catch( Exception e ) {
	e.printStackTrace();
    System.out.println(e.getMessage());
}

printStackTrace() : 호출스택(call stack)에 대한 정보와 예외메세지를 출력

getMessage() : 예외메세지 출력

-> 예외 발생 원인을 알수 있다

 

finally블럭

예외 발생여부에 상관없이 실행되어야하는 코드포함시키기 위해 사용됨

try-catch-finally의 순서

try {
	// 예외 발생할 가능성 있는 문장
} catch (Exception1 e1) {
	// 예외 처리위한 문장
} finally {
	// 예외 발생여부 상관없이 수행되어야 하는 문장
}