자바 예외처리 catch - try

728x90

Catch - try

오류가 예상되는 코드에 catch블럭으로 감싸놓고, 예외가 발생되면 try블럭으로 이동시켜 try블럭안의 코드를 실행하게 하는 예외처리 방법이다.

 

모든 예외클래스를 자바 개발자들이 예상하지 못하기 때문에, 직접 예외처리 클래스를 생성할 수 있다.

 

주로 예외처리의 모든 조상인 'Exception'을 extends로 상속받지만 Exception을 상속받는 경우에는 오류 발생을 기정 사실화 시켜 try - catch로 처리를 해야한다.

그래서 가능한 경우 선택적 예외처리인 RunTimeError를 선언하여 catch - try구문을 생략하고 코드를 간결화 한다.

	public void uncheckedError() {
		try {
			throw new Exception();
//			Exception은 try & catch구문 필수
		} catch (Exception e) {
		}
		throw new RuntimeException();
//		프로그래머의 실수로 발생된 RunTimeError는 선택 unchecked
	}
}

 

아래의 코드에는 오류클래스를 생성하고 선택적 예외처리인 RunTimeError를 선언하여 예외처리를 하였다.

예외처리를 할 때 super()를 통해 RunTimeError 생성자에 직접 문구를 지정해주어 (메서드 오버라이딩), 예외 발생 시 지정된 문구를 출력하도록 하였다. 

	public static void main(String[] args) {
		try {
			System.out.println("나이를 입력해주세요");
			System.out.println("당신의 나이는 " + readAge() + "살 입니다.");
		}
		catch (Exception e) {
//			e.printStackTrace();
			System.out.println(e.getMessage());
			}
	}
	public static int readAge() throws AgeInputException{
		Scanner keyboard = new Scanner(System.in);
		int age = keyboard.nextInt();
		if(0<age && age<120) {
			return age;
		}
		else {
			throw new AgeInputException();
		}
	}
}

class AgeInputException extends RuntimeException{
	public AgeInputException() {
		super("유효하지 않은 나이를 입력하셨습니다");
	}
//	부모 Exception을 상속받고 그 생성자를 오버라이딩하여 오류가 발생할 때 
//	super()안의 문구를 출력하게 함
}
728x90