예외 처리 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 |