본문 바로가기
백엔드개발자/JAVA

예외처리 1( try-catch, printStackTrace(), getmessage() )

by 보혀니 2022. 12. 11.

예외 클래스의 계층 구조

 모든 예외의 최고 조상은 Exception클래스이다.

 

 Exception

 -- IOException

 -- ClassNotFoundException

 --  ...

 -- RuntiomeException

   ㄴ ArithmeticException

   ㄴ ClassCastException

   ㄴ NullpointException

   ㄴ ...

   ㄴ IndexOutOfBoundsException

 

예외처리, try-catch문

 예외처리란, 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성 하는 것.

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

 

	public static void main(String[] args) {

		try {
			// 예외가 발생할 가능성이 있는 문장
		} catch (Exception e) {
			// Exception이 발생 했을 경우, 이를 처리하기 위한 문장
		} catch (Exception2 e2) {
			// Exception2 발생 했을 경우, 이를 처리하기 위한 문장
		} catch (Exception3 e3) {
			// Exception3 발생 했을 경우, 이를 처리하기 위한 문장
		}
	}

 하나의 try블럭에 하나 이상의 catch 블럭이 올 수 있으며, 이 중 발생한 예외의 종류와 일치하는 단 한 개의 catch블럭이 수행이 된다. 발생한 예외의 종류와 일치하는 catch블럭이 없으면 예외처리가 되지 않는다.

 

try-catch문의 흐름

1. try블럭 내에서 예외가 발생한 경우

-> 발생한 예외와 일치하는 catch블럭을 확인

-> 일치하는 catch블럭을 찾게 되면, catch블럭 내의 문장을 수행함

-> 문장 수행 후 try-catch문을 빠져나가서 다음 문장을 계속해서 수행.

 

코드

	public static void main(String[] args) {

		System.out.println("1");
		System.out.println("2");
		try {
			System.out.println("3");
			System.out.println(0/0); // 고의로 ArithmeticException을 발생 시킴
		} catch (Exception e) {
			System.out.println("4");
		}

		System.out.println("5");
	}

결과

 

2. 예외가 발생하지 않은 경우

-> catch 블럭을 거치지 않고 try-catch문을 빠져나가서 다음 문장을 계속해서 수행.

 

코드

	public static void main(String[] args) {

		System.out.println("1");
		System.out.println("2");
		try {
			System.out.println("3");
		} catch (Exception e) { // 모든 예외의 최고 조상인 Eeception
			System.out.println("4");
		}

		System.out.println("5");
	}

결과

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

 

 

예제  코드

	public static void main(String[] args) {

		try {
			System.out.println(0 / 0); // 고의로 ArithmeticException을 발생 시킴
		} catch (ArithmeticException e) { // Eeception 보다 뒤에 올 수 없지
			System.out.println("ArithmeticException");
		} catch (Exception e) {
			System.out.println("Exception"); // ArithmeticException을 제외한 모든 예외처리를 함
		}

		System.out.println("끄읕");
	}

결과

 

 

printStackTrace() / getmessage()

 예외가 발생했을 때 생성되는 예외 클래스의 인스턴스에는, 발생한 예외에 대한 정보가 담겨 있다.

printStackTrace()와 getMessage()를 통해서 이 정보들을 얻을 수 있음.

catch블럭의 괄호에 선언된 참조변수를 통해서 이 인스턴스에 접근할 수 있다.

이 참조변수는 catch블럭 내에서만 사용가능 하다.

 

printStrackTrace()

-> 예외 발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메세지를 화면에 출력함

getMessage()

-> 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻을 수 있음

 

 

 

 

참고: 자바의정석

 

 

 

 

예외처리 2( throw, throws, finally )

예외처리 1( try-catch, printStackTrace(), getmessage() ) 예외 클래스의 계층 구조 모든 예외의 최고 조상은 Exception클래스이다. Exception -- IOException -- ClassNotFoundException -- ... -- RuntiomeException ㄴ ArithmeticExceptio

bohyeon2.tistory.com