18-1 자바 예외처리의 기본

일반적으로 말하는 예외는 사용자가 만든 예외이고, 사용자가 예외상황을 만들었을 때 프로그래머가 처리하는 것을 예외처리라고 한다.

단순한 문법 오류가 아닌 실행 중간에 발생하는 ‘정상적이지 않은 상황’을 뜻함 (기대하지 못했던 상황)

java.lang.ArithmeticException
// -> 수학 연산에서의 오류 상황을 의미하는 예외 클래스

java.util.InputMismatchException
// -> 클래스 Scanner를 통한 값의 입력에서의 오류 상황을 의미하는 예외 클래스

if else 도 예외처리 문장으로 볼 수 있지만 일반적인 흐름으로 볼 때 예외처리 코드인지 알 수가 없음

그래서 예외처리 코드를 봤을 때 바로 알 수 있었으면 해서 try-catch문이 생김

try{
...관찰 영역...
}
catch(ArithmeticException e){
...특정 예외 상황 처리 영역...
}

try{ } 안에서 발생하는 예외는 catch { } 안에서 처리

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번에서부터 다시 실행이 된다.