카테고리 없음

Sep1st_예외처리(try /catch)

장꾸꾸 2020. 9. 1. 13:13

Try / Catch 예외처리

프로그램 사용자의 실수도 프로그래머가 해결해야하므로 필요

try 문에서 오류가 발생하면 실행하지 않고 해당 오류가 기재된 catch문으로 빠진다. 

프로그램이 shut down되는 것이 아니라 다시 실행됨. 재시도가 필요한 경우는 그 문구를 보여줄 수 있다.

 

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("숫자를 입력하세요");
		String input = scan.nextLine();
		try {
			int [] arr = new int [3];
			arr[3] = 10; // 인덱스오류 발생 존재하지 않는 4번째 배열이 생긱ㅁ
			
			int num =  Integer.parseInt(input);
			num *= 2;
			System.out.println(num);
		}catch (NumberFormatException e) {
			System.out.println("Lmsg" + e.getLocalizedMessage());
			System.out.println("msg"+e.getMessage());
			System.out.println("trace"+e.getStackTrace());
			System.out.println("숫자포맷 오류");
		}catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("배열오류");
		}catch(Exception e) {
			System.out.println("그 외 오류");
		}
		System.out.println("프로그램 끝");
	}
}

 - 존재하지 않는 4번째 배열방의 경우는 ArrayIndexOutofBounds로 표시되야 하므로 또 다른 catch를 추가해서 보여준다.

- 다형성을 기억하자. 모든 자식 클래스는 부모 클래스에 속한다. Exception e가 그런 경우다.

모든 오류는 Exception 클래스의 자식이다. 따라서 Exception e를 위에 위치시키면 다른 오류 다 건너뛰고 해당 catch문으로 빠진다. 오류의 종류를 확인하기 귀찮다면 그냥 Exception e 만 해줘도 된다.

- try/catch문은 필요에 의해 만드는 경우와 문법상 꼭 필요한 경우로 나뉘는데, 후자의 경우 이클립스에서 잡아준다. 빨간줄 그어지고 오류 뜨면 마우스 올려서 2번째를 누르자

- Lmsg/ msg/ trace의 차이점은 후에 추가(그닥 중요하지 않다고 함)