본문 바로가기

PL(ProgrammingLanguage)/JAVA

throws

throws는 예외가 발생했을 때 예외를 호출한 쪽에서 처리하도록 던져준다.

 

package Java02;

public class ThrowsExam {
    public static void main(String[] args) {

        // 정수에 값 넣기
        int i = 10;
        int j = 0;
        int k = divide(i, j);
        System.out.println(k);
    }

    // 정수 값 2개를 입력받고 그 정수를 나누어서 결과를 리턴하는 divide라는 메서드 정의
    public static int divide(int i, int j) {
        int k = i / j;
        return k;
    }
}

 

실행 시 아래와 같이 오류가 발생

 

 

divide 메소드 내부에서  ArithmeticException이 발생하지 않게 하려면 

해당 라인에서 try{}으로 감싸서 오류를 처리를 해야만 한다.

 

하지만 오류를 처리하지 않고 divide메소드를 호출한 쪽에게 오류를 처리하라라고 떠넘길 수 있다.

 

 

내가 처리하지 않고 나를 호출 한쪽에서 처리하세요!

" throws " 키워드

 

 

 

메소드 선언부에다 throws 발생할 Exception이라고 적어주면 된다.

 

-- 수정

  // 정수 값 2개를 입력받고 그 정수를 나누어서 결과를 리턴하는 divide라는 메서드 정의
    public static int divide(int i, int j) throws ArithmeticException {
        int k = i / j;
        return k;
    }

나는 오류를 넘길 거예요~ 어떤 오류를 넘길 거냐면 ArithmeticException이라는 오류를 넘길 거예요.

 

-> 이 메소드 내에서 수행하다가 발생되는 오류를 메소드 내에서 처리하지 않고, 

이 메소드를 호출한 쪽에서 처리할 수 있도록 오류를 떠넘기는 것.

 

이렇게 넘겨줄 때에서 오류를 하나만 넘길 수 있는 게 아니라 ', '로 여러 개도 가능하다.

 

-- ', ' 예시

  // 정수 값 2개를 입력받고 그 정수를 나누어서 결과를 리턴하는 divide라는 메서드 정의
    public static int divide(int i, int j) throws ArithmeticException, ClassCastException {
        int k = i / j;
        return k;
    }

 

-- 전체 코드

package Java02;

public class ThrowsExam {
    public static void main(String[] args) {

        // 정수에 값 넣기
        int i = 10;
        int j = 0;

        // 오류를 처리해야하는 부분
        try {
            int k = divide(i, j);
            System.out.println(k);
        } catch (ArithmeticException e) {
            // 오류의 정보르 출력
            System.out.println(e.toString());
        }

    }

    // 정수 값 2개를 입력받고 그 정수를 나누어서 결과를 리턴하는 divide라는 메서드 정의
    public static int divide(int i, int j) throws ArithmeticException {
        int k = i / j;
        return k;
    }
}

 

-- 실행결과

프로그램이 종료되는 것이 아니라 오류를 잘 처리하고 있는 것을 확인할 수 있다.