⦁ 프로그램 오류
- 컴파일 에러(compile-time error) : 컴파일 할 때 발생하는 에러
(자바 컴파일러가 하는 일 : 구문체크, 번역, 최적화)
- 런타임 에러(runtime error) : 실행할 때 발생하는 에러
- 논리적 에러(logical error) : 작성 의도와 다르게 동작
- Java의 런타임 에러
에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
- 예외 처리의 정의와 목적
예외처리란? 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
⦁ 예외 클래스의 계층 구조

⦁ Exception과 RuntimeException
- Exception클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
- RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외
ex) ArithmeticException (산술계산예외), ClassCastException(형변환오류), NullPointerException (빈 객체를 사용할 때), indexOutOfBoundsException (배열 벗어남)
⦁ 예외 처리하기. try-catch문
try {
// 예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exception e1) {
// Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception2 e2) {
// Exception2가 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (ExceptionN eN) {
// ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
}
⦁ try-catch문에서의 흐름
① try블럭 내에서 예외가 발생한 경우,
1. 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.
2. 일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch 문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch블럭을 찾지 못하면, 예외는 처리되지 못한다.
② try블럭 내에서 예외가 발생하지 않은 경우,
1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.
ex) 예외가 없는 경우의 try-catch 블럭
public 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);
} // try-catch의 끝
System.out.println(5);
}
}
ex) 예외가 있는 경우의 try-catch 블록
public 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 e) {
System.out.println(3);
} // try-catch의 끝
System.out.println(4);
} // main 메소드의 끝
}
⦁ 예외의 발생과 catch블럭
- 예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감
- 일치하는 catch블럭이 없으면, 예외는 처리 안됨
- Exception이 선언된 catch블럭은 모든 예외 처리 가능(마지막 catch블럭)
(Exception catch블럭은 가장 마지막에 놓는 것이 좋다. Exception은 모든 예외의 최고조상)
ex)
public 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(args[0]); // ArrayIndexOutOfBoundsException 발생했으나
// 처리해줄 catch블럭이 없어 예외처리가 되지 않고 프로그램이 종료됨.
System.out.println(0/0);
System.out.println(4); // 실행되지 않는다.
} catch (ArithmeticException ae) {
if (ae instanceof ArithmeticException)
System.out.println("true");
System.out.println("ArithmeticException");
} // try-catch의 끝
System.out.println(6);
}
}
출처 - 유튜브 남궁성의 정석코딩 [자바의 정석 - 기초편]
'Java > Java의 정석' 카테고리의 다른 글
220315 Java - Chapter 9. java.lang패키지와 유용한 클래스 (0) | 2022.03.15 |
---|---|
220314 Java - Chapter 8. 예외 처리(이어서 마무리) (0) | 2022.03.14 |
220310 Java - Chapter 7. 객체지향개념 II Part.3 (0) | 2022.03.11 |
220309 Java - Chapter 7. 객체지향개념 II Part.2 (0) | 2022.03.10 |
220308 Java - Chapter 7. 객체지향개념 II Part 1 (0) | 2022.03.09 |