- 예외 처리란 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것을 의미합니다.
예외 처리의 목적은 프로그램의 비정상 종료를 막고, 정상적인 실행 상태를 유지하는 것입니다.
1) try~catch문
- 예외를 처리할 때 사용하는 구문 중 하나가 try~catch문 입니다.
try~catch문의 예시를 코드로 나타내면 다음과 같습니다.
if문과는 달리, try 블럭이나 catch 블럭은 블럭 내에 포함된 문장이 한 줄이라도 괄호를 생략할 수 없습니다.
try{
// 예외가 발생할 가능성이 있는 문장을 넣는다.
}catch(Exception e1){
// Exception1이 발생했을 경우, 처리할 문장을 넣는다.
}catch(Exception e2){
// Exception2가 발생했을 경우, 처리할 문장을 넣는다.
}catch(Exception e3){
// Exception3가 발생했을 경우, 처리할 문장을 넣는다.
}catch(Exception e4){
// Exception4가 발생했을 경우, 처리할 문장을 넣는다.
}
2) try~catch문에서의 흐름
(1) try블럭 내에서 예외가 발생한 경우
(1-1) 발생한 예외와 일치하는 catch 블록이 있는지 확인한다
(1-2) 일치하는 catch 블럭을 찾게 되면, 해당 catch 블럭 내의 문장을 수행하고,
전체 try~catch문을 빠져 나가서 그 다음 문장을 계속해서 수행한다.
만일 일치하는 catch 블럭을 찾지 못하면 예외는 처리되지 못한다
class Ex8_2{
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);
}
}
// 실행 결과
1 3 4
(2) try블럭 내에서 예외가 발생하지 않는 경우
(2-1) catch 블럭을 거치지 않고 전체 try~catch문을 빠져나가서 수행을 계속한다.
class Ex8_1{
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);
}
}
// 실행 결과
1 2 3 5
3) 예외의 발생과 catch 블럭
- 예외가 발생하면, 이를 처리할 catch 블럭을 찾아 내려갑니다.
일치하는 catch 블럭이 없으면, 예외 처리는 되지 않으며,
Exception이 선언된 catch 블럭은 모든 예외를 처리하므로, 마지막 catch 블럭이 되어야 합니다.
class Ex8_4{
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 true ArithmeticException 6
참고
남궁성 자바의 정석
'Java' 카테고리의 다른 글
예외 처리(Exception Handling)(4) - 예외 발생시키기 (0) | 2022.08.30 |
---|---|
예외 처리(Exception Handling)(3) - printStackTrace(), 멀티 catch 블럭 (0) | 2022.08.30 |
예외 처리(Exception Handling)(1) - 프로그램 오류, 예외 클래스의 계층 구조 (0) | 2022.08.29 |
서비스 제공자 프레임워크 (0) | 2022.08.26 |
생성자 대신 정적 팩토리 메서드 (0) | 2022.08.25 |