예외란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류이다.
예외는 일반 예외(Checked Exception)과 실행 예외(Uncheked Exception)로 구분된다.

일반 예외(Checked Exception)는 컴파일러가 컴파일 하는 과정에서 확인하는 예외이다.
실행 예외(Unchecked Exception)은 컴파일러가 체크하지 않는 예외이다.
| 종류 | 발생 조건 |
|---|---|
| NullPointerException | null 값을 갖는 참조 변수에 도트 연산자 사용 |
| ArrayIndexOutOfBoundsException | 배열에서 인덱스 범위를 초과해서 사용 |
| NumberFormatException | 숫자로 변환될 수 없는 문자에 parseInt() 또는parseDouble() 사용 |
| ClassCastException | 변환이 불가능한 타입으로 변환 시도 |
try-catch-finally 블록을 사용하여 예외를 처리할 수 있다.
| 블록 | 기능 |
|---|---|
| try | 예외 발생 가능 코드를 위치시킴. 예외 발생 시 catch 블록으로 이동 |
| catch | 예외 처리 코드 실행 |
| finally | 생략 가능. 예외 발생 여부와 상관없이 항상 실행됨. try나 catch에서 return을 사용하더라도 실행됨 |
try{
Class clazz = Class.forName("java.lang.String2");
} catch(ClassNotFoundException e){
System.out.println("클래스가 존재하지 않음");
}
// java.lang.String2 클래스는 존재하지 않기 때문에 catch문이 실행됨
발생되는 예외가 많은 경우, 다중 catch를 사용하여 예외별로 처리 코드를 다르게 할 수 있다.
try {
//ArrayIndexOutOfBoundsException 예외 발생 코드
//NumberFormatExcetion 예외 발생 코드
} catch (ArrayIndexOutOfBoundsException e) {
// 예외 처리
} catch (NumberFormatExcetion e) {
// 예외 처리
}
예외를 처리해줄 catch 블록을 위에서부터 차례대로 검색된다.
try {
//ArrayIndexOutOfBoundsException 예외 발생 코드
//NumberFormatExcetion 예외 발생 코드
} catch (Exception e) {
// 예외 처리
} catch (ArrayIndexOutOfBoundsException e) {
// 예외 처리
}
어떤 예외가 발생하던 첫 번째 catch 블록만 선택되어 실행된다.
try {
//ArrayIndexOutOfBoundsException 예외 발생 코드
//NumberFormatExcetion 예외 발생 코드
} catch (ArrayIndexOutOfBoundsException e) {
// 예외 처리
} catch (Exception e) {
// 예외 처리
}
위와 같이 코드를 수정하면, ArrayIndexOutOfBoundsException 예외는 첫 번째 블록에 잡히고 나머지 예외는 두 번째 블록에 잡힌다.
throws 키워드를 사용하면, 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘길 수 있다.
try {
exceptionMethod();
} catch (ClassNotFoundException e)
// 예외 처리
}
public void exceptionMethod() throws ClassNotFoundException{
// throws 떠넘길 예외클래스
// ClassNotFoundException이 발생하면 메소드를 호출한 곳에 떠넘김
Class clazz = Class.forName("java.lang.String2");
}
main 메소드에서도 throws 키워드를 사용하여 예외를 떠넘길 수 있다.
이 경우, JVM이 콘솔에 출력하는 것으로 예외처리를 한다.
public static void main(String[] args) throws ClassNotFoundException{
// 예외가 발생할 코드
}