일반적으로 말하는 예외는 사용자가 만든 예외이고, 사용자가 예외상황을 만들었을 때 프로그래머가 처리하는 것을 예외처리라고 한다.
단순한 문법 오류가 아닌 실행 중간에 발생하는 ‘정상적이지 않은 상황’을 뜻함 (기대하지 못했던 상황)
java.lang.ArithmeticException
// -> 수학 연산에서의 오류 상황을 의미하는 예외 클래스
java.util.InputMismatchException
// -> 클래스 Scanner를 통한 값의 입력에서의 오류 상황을 의미하는 예외 클래스
if else 도 예외처리 문장으로 볼 수 있지만 일반적인 흐름으로 볼 때 예외처리 코드인지 알 수가 없음
그래서 예외처리 코드를 봤을 때 바로 알 수 있었으면 해서 try-catch문이 생김
try{
...관찰 영역...
}
catch(ArithmeticException e){
...특정 예외 상황 처리 영역...
}
try{ } 안에서 발생하는 예외는 catch { } 안에서 처리
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
try{
System.out.print("a/b...a?");
int n1 = kbb.nextInt();
System.out.print("a/b...b?");
int n2 = kb.nextInt();
System.out.printf("%d / %d = %d \\n", n1, n2, n1 / n2");
}
catch(ArithmeticException e) {
e.getMessage();
}
catch(InputMismatchException e) {
e.getMessage();
}
System.out.println("Good bye~~!");
}
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
try{
System.out.print("a/b...a?");
int n1 = kbb.nextInt();
System.out.print("a/b...b?");
int n2 = kb.nextInt();
System.out.printf("%d / %d = %d \\n", n1, n2, n1 / n2");
}
//두개 catch를 묶을수 있음
catch(ArithmeticException | InputMismatchException e) {
e.getMessage();
}
System.out.println("Good bye~~!");
}
catch문은 여러개 올 수 있다.
catch를 동시에 보면서 오류를 찾아가는것은 아니고 아래로 내려가면서 순서대로 확인을 하고 다음 catch문으로 넘어감
try {
1. ...
2. 예외 발생 지점
3. ...
}
catch(Exception e) {
...
}
4. 예외 처리 이후 실행 지점
try문 중 2번에서 예외가 발생 후 catch에서 처리를 하고나면 3번으로 돌아가는게 아니라 catch문을 빠져나와 4번에서부터 다시 실행이 된다.