본문 바로가기

Java/본격 Java 인터페이스

[Java] throw 예외처리

정해진 예외처리말고 개발자가 직접 exception을 상속받아 예외처리하는 방법도 있다.

- 사용하는 메소드의 선언부에 'throws 예외클래스'가 있으면 메소드 사용시 try-catch 안에서 사용해야합니다.

.

.

예제

import java.util.*;

class AgeInputException extends Exception{
	//Exception 클래스를 상속 받았음으로 AgeInputException클래스는 예외클래스임
	public AgeInputException(){
		super("유효하지 않는 나이가 입력되었습니다.");
	}
}

class UserDefineException{
	public static void main(String[] args) {
		System.out.print("나이를 입력하세요 : ");
		try
		{
			int age = readAge();
			System.out.println("당신은 " + age + "세 입니다.");
		}catch (AgeInputException e){
			System.out.println(e.getMessage());
		}
	}

	public static int readAge() throws AgeInputException{
		// throws AgeInputException : readAge()메소드 실행시 AgeInputException이 발생하면 여기에서 처리하는 것이 아닌
		// readAge()메소드를 호출한 곳에서 처리하도록 하겠다는 의미
		Scanner sc = new Scanner(System.in);
		int age = sc.nextInt();
		if (age < 0){
			// 나이가 음수로 들어왔으면
			AgeInputException excpt = new AgeInputException();
			// 예외를 객체(인스턴스)로 생성
			throw excpt;
			// excpt예외가 발생하였음을 JVM에 알리고, 예외처리 매카니즘을 실행
		}
		return age;
	}
}

.

.

try-catch문을 사용하지 않고도 예외처리가 가능하다

main메소드 옆에 throws를 써서 예외처리를 하면 되는데

그러면 콘솔창에 어디서 예외처리가 됐는지 따로 나온다.

.

.

예제

import java.util.*;

class AgeInputException extends Exception{
	public AgeInputException(){
		super("유효하지 않는 나이가 입력되었습니다.");
	}
}

class UserDefineException2{
	public static void main(String[] args) throws AgeInputException {
		System.out.print("나이를 입력하세요 : ");
		int age = readAge();
		System.out.println("당신은 " + age + "세 입니다.");
	}

	public static int readAge() throws AgeInputException {
		Scanner sc = new Scanner(System.in);
		int age = sc.nextInt();
		if (age < 0){
			AgeInputException excpt = new AgeInputException();
			throw excpt;
		}
		return age;
	}
}
728x90
반응형