# throw
  
   - 내가 원하는 예외를 발생시킨다
  
   # throws
  
   - 이 메서드에서 발생할 수 있는 예외들을 미리 고지하는 용도로 사용하는 문법
   - '이 메서드에서는 다음의 예외들이 발생할 수 있으므로 주의하세요'라는 뜻
  
   # 상속을 통해 원하는 예외 생성하기
  
   - Exception 또는 RuntimeException 클래스를 상속받으면 해당 클래스는 예외가 된다
   - RuntimeException을 상속받는 경우 굳이 throws로 알려주지 않아도되는 사소한 예외가 된다
   - Exception을 상속받는 경우 반드시 예외 처리가 되어야 컴파일이 가능한 중요한 예외가 된다
     이 경우 throws로 반드시 알려줘야하는 예외가 된다

 

사용자 정의 예외 처리하는 법을 알아보자

public static void method1(int a) 
        throws InputMismatchException, ArrayIndexOutOfBoundsException{
    if (a % 2 == 1) {
        System.out.println("a는 홀수입니다.");

        // 내가 원하는 예외 인스턴스를 만들어 원하는 시점에 발생시킬 수 있다
        throw new InputMismatchException("홀수라서 마음에 안듭니다..");
    } else {
        System.out.println("a는 짝수입니다.");
        throw new NotEnoughMoneyException();
    }
}

 

Exception을 상속받은 예외는 반드시 throws 키워드로 선언부에 명시해야한다

public static void method2() throws TooFastSpeedException {
    int ran = (int)(Math.random() * 2);

    if (ran == 0) {
        // Exception을 상속받은 예외는 반드시 throws로 추가되어야 한다
        throw new TooFastSpeedException();
    } else if (ran == 1) {
        System.out.println("과속 카메라에 걸리지 않았습니다");
    }
}

 

활용 예시 ...

public static void main(String[] args) {
    try {
        method1(1);
    } catch (InputMismatchException e) {
        System.out.println("예외1");
    } catch (NotEnoughMoneyException e) {
        System.out.println("예외2");
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("예외3");
    }

    try {
        method2();
    } catch (TooFastSpeedException e) {
        System.out.println("카메라에 걸렸습니다..");
    }
}

 

 

RuntimeException 또는 Exception을 상속받아 내가 원하는 예외 클래스를 만들수 있다

 

RuntimeException 상속-

class NotEnoughMoneyException extends RuntimeException {
	public NotEnoughMoneyException() {
		super("돈이 부족합니다...");
	}
	
	public NotEnoughMoneyException(int money) {
		super(String.format("돈이 %d원 부족합니다...", money));
	}
}

 

Exception 상속-

class TooFastSpeedException extends Exception {
	public TooFastSpeedException() {
		super("속도가 너무 빠르다");
	}
}

+ Recent posts