본문 바로가기

개발자노트

예외와 예외처리(try, catch) - Exception, .printStackTrace(); 사용

아직 어떤 예외가 발생할지 모르기 때문에 Exception을 사용한다.

그리고 그걸 개발자가 확인할 수 있게 사용하는 것이 .printStackTrace(); 을 사용하여 시각화한다.

 

 

package class02;

import java.util.ArrayList;
import java.util.Scanner;

public class Test04 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<Integer> data = new ArrayList<Integer>();

		data.add(-1);
		data.add(0);
		data.add(1);
		data.add(2);
		data.add(3);
		System.out.println("로그: 배열리스트 확인 : " + data);

		while (true) {
			int res = 10;
			try {
				System.out.println("0~4 정수 입력");
				int num = sc.nextInt();
				res = 10 / data.get(num); // 예외가 발생할 수 있는 구간
				System.out.println(res);

			} catch (ArithmeticException e) {
				System.out.println("0으로는 나눌 수 없습니다." + e.getMessage()); // 익셉션 클래스가 멤버변수로 Message를 가지고 있구나!
				continue;
				
			} catch (IndexOutOfBoundsException e) {
				System.out.println("범위를 벗어날 수 없습니다.");
				continue;
				
			} catch (java.util.InputMismatchException e) {
				System.out.println("문자열 좀 제거해줄래?");
				sc.nextLine(); // 버퍼에 남아있는 String 값이 입력될 곳이 없어서, 버퍼 안에서 계속 입력된 채로 남아서
						   // 그것을 증발시키는 역할로 사용한다.
			
			}

			catch (Exception e) { // 어떤 예외가 발생할지 모르는 상황에는 최상위 Exception을 사용해준다.
				System.out.println("아직 처리되지 않는 예외가 발생함!!");
				e.printStackTrace();
				
			}
			
			}
		}

	}