[자바 기초] 예외 처리

 예외 : 잘못된 값이나 의도 외의 행위에 의한 문제


개발자에게 있어 예외란 개발자의 의도 외의 동작에 의한 이상 현상을 의미한다.

자체적인 동작은 조건문 if 와 유사하지만, 

조건문 if의 경우 오류를 유발할 수 있는 값과 정상 값의 구별이 어렵다.

구별이 불가능한 건 아니지만, 개발자 본인이 예외를 상정하고 추가적인 조건을 추가해야 할 필요가 있고, 예외를 상정한 조건을 추가하지 못한 경우, 해당 조건에 의해 오류가 발생 할 수 있다.


하지만 예외 처리의 경우 개발자 본인이 상정하지 못한 경우의 예외 상황에 대해서도 예외의 전달이 가능하다.


try, catch, finally 로 구성 되어 있으며, 각각

try : 예외 처리 구간

catch : try 에서 발생한 예외에 따른 처리

finally : 예외 발생 여부 상관없이 반드시 실행됨


try 에서 예외 발생 시, try에서 발생한 예외의 종류에 따라 각 ②catch 문에서 지정한 동작을 수행, 마지막으로 ③finally 문에 지정한 동작을 무조건 수행한다

try 블록과 catch 문의 블록 사이에는 if 문 처럼 다수의 catch문 블록을 작성할 수 있으며, 각 catch문에 대한 각 오류의 종류 또한 다양하게 설정할 수 있다.


예외 클래스의 종류

NullPointerException : 객체 참조가 없는 상태

ArrayIndexOutOfBoundsException : 배열 인덱스 초과

NumberFormatException : 문자열의 숫자 변환 시 변환 불가 할 경우

ClassCastException : 상하위 클래스 타입 변환이 아닌 경우 발생

Exception : 모든 예외에 대한 처리일 경우


예제)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Scanner;
 
public class test1 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            int i = 0;
            System.out.print("what val : ");
            Scanner instrScanner = new Scanner(System.in);
            i = instrScanner.nextInt(); // 오류 유발 가능 : 0~4 이외의 값 입력시
            
            int[] numbers = {1,2,3,4,5};
            System.out.println("val : " + numbers[i]);
            
        }catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("error : "+e.getMessage()); // index 초과 범위 호출
        }catch (Exception e) {
            System.out.println("error : "+e.getMessage()); // 모든 오류
        }finally {
            System.out.println("complete");
        }
        
        
    }
 
}
cs

※catch 문에 사용된 변수 e 또한 클래스 메소드의 호출이 가능하다
ex) e.getMessage() : 오류 메시지 호출

댓글