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("다시!");
			}

		}

	}

}

+ Recent posts