본문 바로가기

Java

14 - 3장 예외 전가

 예외 처리 2가지 방법 

 - Add throws declaration

  => 예외 전가

 - Surround with try/catch

  => try-catch 구문 이용

 

 

- 예외를 전가 하면 예외 처리의 의무를 호출한 메서드가 갖게 됨

- 상위의 메서드도 자신을 호출한 지점으로 예외 전가 가능

 

1. 예외 전가 문법

 

리턴 타입 메서드명(입력매개변수) throws 예외 클래스 명 {
	//예외 발생 코드
}

ex) abc() 메서드에서 bcd() 메서드를 호출하고, bcd() 메서드 내부에 예외가 발생할 수 있는 코드 포함한 경우

 

1) bcd()메서드가 직접 예외 처리

void abc() {
	bcd(); //1.호출
}

void bcd() {
	try { //2. 예외 처리
    	//예외 가능 블록
    }catch(예외 클래스 타입 참조 변수) {
    	//예외 처리
    }
}

 

2) bcd() 메서드가 예외를 처리하지 않고, 자신을 호출한 메서드로 예외 전가 

 - abc() 메서드는 전가된 예외를 처리할 의무를 갖게 됨 

void abc() {
	try{
    	bcd(); //1. 호출
    }
    catch(예외 클래스 타입 참조 변수) {
    	//예외 처리
    }
}

void bcd() throws 예외 클래스 타입 { //2. 예외 전가
	//예외 가능 블록
}

 

void abc() {
	try{
    	bcd();
    } catch (InterruptedException e) {
    	//예외 처리 구문
    }
}
void bcd() throws InterruptedException {
	Thread.sleep(1000);
}

 - bcd() 메서드의 내부에는 예외 발생 가능 코드 포함

 - bcd() 메서드는 직접 예외 처리를 하는 대신, InterruptedException이 자신을 호출한 메서드로 전가 

 - abc() 메서드가 InterruptedException을 처리해 줘야 함

 

- 상위 메서드들도 예외를 직접 처리하지 않고 계속 전가만 한다면

- 최상위 메서드인 main()메서드까지 올라가고

- main() 메서드마저도 예외를 전가하면 이 main() 메서드를 실행한 자바 가상 머신이 직접 예외처리

  -> 발생한 예외의 정보를 화면에 출력하고 프로그램 강제 종료

 

package ThrowsException;

public class ThorwsException {
	public static void main(String[] args) throws ClassNotFoundException{
		Class cls = Class.forName("java.lang.object2");
	}
}

 

- 하나의 메서드 안에 발생할 수 있는 예외가 여러 종류 일때는 

- 여러 개의 예외를 한 번에 전가할 수  있음

- 쉼표(,)로 구분해서 나열

 

다중 예외 전가 구조 

리턴 타입 메서드명(입력매개변수) throws 예외 클래스 A, 예외 클래스 B... {
	//여러 개의 예외 종류가 발생할 수 있는 블록
}
void abc() {
	try(
    	bcd();
    } catch(예외 클래스 A | 예외 클래스 B e) {
    	//예외 처리
    }
}
void bcd() throws 예외 클래스 A, 예외 클래스 B {
	//예외 발생 가능 블록
}

'Java' 카테고리의 다른 글

15 - 1장 프로그램, 프로세스, 쓰레드  (0) 2023.06.13
14 - 4장 사용자 정의 예외 클래스  (0) 2023.06.13
14 - 2장 예외 처리  (0) 2023.06.13
14 - 1장 예외  (0) 2023.06.12
13 - 3 장 이너 인터페이스  (0) 2023.06.05