카테고리 없음
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의 차이점은 후에 추가(그닥 중요하지 않다고 함)