자바 자바학원 java java학원 scjp scjp학원 자바자격증 java자격증 scjp자격증 jsp ejb 자바프로그래밍 웹프로그래밍

[자바자격증/SCJP/자바학원]예외 처리(Exception Control) 2

 

 

예외 만들기

사용자가 직접 예외 클래스를 만들 수 있다. Exception 클래스를 상속하면 된다.

 

class MyException extends Exception{

  MyException(String ErrorMessage){   // 생성자

     super(ErrorMessage);             // 부모 생성자

  }

}

 

ErrorMessage는 에러 메시지로 화면에 출력할 내용이다. 사용자가 정의한 예외 객체를 던지려면 'throw'키워드를 사용하여 다음과 같이 한다.

 

throw new MyException("에러 메시지");

 

"MyException 객체를 만들어서 던져라"라고 이해하면 쉬울 것이다. 어떤 상황이 예외가 되는 조건이면 예외 객체를 만들어서 던지면 된다. 예외를 던지려면 메소드는 예외를 던지는 메소드로 정의해야 한다.

 

void f() throws MyException{        // 예외를 던지는 메소드

 

    if(에러 조건)

         throw new MyException("에러 메시지");

    ...

}

 

이제 예제를 해 보자.

 

Excep11.java

 

class MyException extends Exception{

  MyException(String ErrorMessage){

    super(ErrorMessage);

  }

}

public class Excep11{

 

  static int avg(int a, int b) throws MyException{

    if(a<0 || b<0)                                // x1

      throw new MyException("음수 안 됨");    // x2

    else if(a>100 || b>100)                      // x3

      throw new MyException("너무 큼");       // x4

    return (a+b)/2;                               // x5

  }

  

  public static void main(String[] args){

    try{

      System.out.println(avg(-10,20));            // x6

    }catch(MyException e){

      System.out.println(e);                      // x7

    }

  }

}


 

출력 결과

 

MyException: 음수 안 됨

 


 

x4행의 'avg(-10, 20)'을 호출하면 x1행의 조건이 true가 되어 x2행이 실행된다. 따라서 x6행으로 예외 객체가 던져진다. 즉, x6행에서 예외가 발생하여 x7행에서 에러 메시지를 출력한다. x4행을 수정하여 'avg(110,200)'을 호출하면 'MyException: 너무 큼'이 출력될 것이다. 'avg(10,20)'을 호출하면 예외가 발생하지 않고 x5행이 실행되어 15가 출력된다.

 

Exception의 부모 클래스가 왜 Throwable인지 이제 알 수 있을 것이다. 던질 수 있는 객체는 Exception과 Error이다.

 

 

 

 

연습 문제

 

 

1. 다음 코드를 실행했을 때 어떤 결과가 예상되는가? 직접 해보자.

 

int[] a;

try{

  a[10]= 100;

}catch(ArrayIndexOutOfBoundsException ae){

  System.out.println("A");

}catch(NegativeArraySizeException ne){

  System.out.println("B");

}

 

 

2. 다음 코드를 실행했을 때 어떤 결과가 예상되는가? 직접 해보자.

 

int[] a = new int[10];

try{

  a[1]= 100;

}catch(ArrayIndexOutOfBoundsException ae){

  System.out.println("A");

}catch(Exception e){

  System.out.println("B");

}

 

 

3. 평균을 구하는 메소드 average는 0이상 100 이하의 세 정수를 인수로 취하여 평균을 반환한다. 0미만이거나 100초과인 정수가 인수로 넘어오면 예외를 던진다. 메소드 average를 완성해보자.

 

int average(int a, int b, int c) throws RuntimeException{

 

  // OR(a<0, b<0, c<0) 이면 ArithmeticException을 던진다.

  // OR(a>100, b>100, c>100) 이면 IllegalArgumentException을 던진다.

 

  return (a+b+c)/3;

}

 

 

4. 클래스 AvgException은 Exception을 상속하며 다음과 같다.

 

class AvgException extends Exception{

  AvgException(){

    super();

  }

  AvgException(int number){

    super("AvgException: "+number);

  }

  AvgException(String ErrorMessage){

    super(ErrorMessage);

  }

}

 

인수 중에서 최대 값을 찾는 메소드 maxOfNaturalNumbers를 완성해 보자.

 

 

int maxOfNaturalNumbers(int a, int b, int c) throws AvgException{

 

  // a가 0이하의 수이면 'new AvgException()'를 던진다.

  // b가 0이하의 수이면 'new AvgException(b)'를 던진다.

  // c가 0이하의 수이면 'new AvgException("마지막 인수")'를 던진다.

 

  int m=a>b?a:b;

  return m>c?m:c;

}

 

 

추천학원

자바 자바학원 java java학원 scjp scjp학원 자바자격증 java자격증 scjp자격증 jsp ejb 자바프로그래밍 웹프로그래밍

Posted by genesmer
,