자바 자바학원 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 자바프로그래밍 웹프로그래밍