import java.util.Scanner;
public class Except {
public static void main(String[] args) {
// 예외처리
// 예외 Exception
Scanner sc = new Scanner(System.in);
// int act = sc.nextInt();
// java.util.InputMismatchException
// 어떤 예외인지
// (Except.java:10)
// 발생한 코드의 지점!
// int[] arr = new int[3];
// System.out.println(arr[act]);
// java.lang.ArrayIndexOutOfBoundsException
int a = 10;
int b = 0;
try {
System.out.println("여기는 출력이 됨, 예외가 발생하면 바로 캐치로 넘어가니 아래는 출력이 안됨");
System.out.println(a / b);
System.out.println("만약 예외가 없으면 여기까지 출력이됨!");
} catch (ArithmeticException e) {
e.printStackTrace();
System.out.println(e.getMessage());
System.out.println("예외 발생");
} catch(Exception e) { // 모든 상황을 포함한 오류이므로 가장먼저 쓰면 문법적 오류가 됨.
System.out.println("알수 없는 예외 발생"); // else if 처럼 여러개 달수 있다.
} finally { // 예외발생에 상관없이 무조건 수행 가장 마지막에 다는것이 워칙
System.out.println("항상 수행하는 영역");
}
// java.lang.ArithmeticException: / by zero
System.out.println("확인"); // finally 제외하면, 예외처리 되면 출력됨
// 예외
// 문법적 문제 XX (코드 문법 자체는 문제 XX)
// -> 실행가능한 코드
// => 실행을 진행하면 문제가 발생 (== 실행시에 문제가 발생)
// => 예외가 발생하게되면, 프로그램이 즉시 종료됨!
// 예외처리
// 실행중에 문제가 발생하더라도, 프로그램을 끝까지 수행하고 싶을때 사용!
// try - catch 문 : 항상 둘 같이 사용해야함
//
// 꿀팁
// 1. 예외처리가 발생하면 가장먼저 오타를 확인하다.
// 2. 예외처리를 메모장에 저장하고, 어떻게 처리하는지 구글링한다.
}
}
import java.util.InputMismatchException;
import java.util.Scanner;
public class ExceptionTest2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num;
while (true) {
System.out.println("양수입력");
try {
num = sc.nextInt(); // 여기서 문자를 입력하면, 버퍼에 문자열이 남아서, 무한루프가 됨
} catch (InputMismatchException e) {
sc.nextLine(); // 버퍼에 남아있는 문자열을 제거
System.out.println("자료형이 올바르지않습니다!");
num = 0; // continue; 로 대체가능
}
if (num > 0) {
break;
} else {
System.out.println("다시!");
}
}
}
}