자바에서는 실행 시 발생할 수 있는 프로그램 오류를 에러와 예외 두 가지로 구분한다. 에러 발생 시 프로그램의 비정상적인 종료를 막을 수 없지만, 예외는 프로그래머가 적절한 코드를 미리 작성해 놓으면 비정상적인 종료를 막을 수 있다.
프로그램 코드에 의해서 수습될 수 없는 심각한 오류
프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있음
사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외로 일반 예외 또는 컴파일러 체크 예외라고 한다. -> 빨간 밑줄
프로그램 실행 시 예외가 발생할 가능성이 높기 때문에 자바 소스를 컴파일하는 과정에서 해당 예외 처리 코드가 있는지 검사하고 만약 예외 처리 코드가 없다면 컴파일 오류가 발생한다.
프로그래머의 실수로 발생하는 예외로 컴파일러 넌 체크 예외라고 한다.
프로그램 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않는다.
컴파일 시 일반 예외가 발생할 가능성이 있는 코드를 발견하면 컴파일 에러를 발생시켜 강제적으로 예외 처리 코드를 작성하도록 요구하지만 실행 예외는 컴파일러가 체크하지 않기 때문에 개발자의 경험을 바탕으로 예외 처리 코드를 작성해야 한다.
try {
// 예외가 발생할 가능성이 있는 문장
} catch (Exception e) {
// 예외 발생 시 처리하기 위한 문장
} finally {
// 예외 발생 여부와 상관없이 항상 수행되어야하는 문장들
}
try {
// 예외가 발생할 가능성이 있는 문장
} catch (ArrayIndexOutOfBoundsException e) {
} catch (NumberFormatException e) {
} finally {
// 예외 발생 여부와 상관없이 항상 수행되어야하는 문장들
}
public class ThrowsExample {
public static void main(String[] args) {
try {
findClass(); // 메소드 호출한 곳에서 예외 처리
} catch (ClassNotFoundException e) {
// 예외 처리 코드
System.out.println("클래스 존재하지 않음");
}
}
// 예외 떠넘기기
public static void findClass() throws ClassNotFoundException {
Class clazz = Class.forName("java.lang.String2");
}
}