사용자 도구

사이트 도구


study:java:javachobo:ch8

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
study:java:javachobo:ch8 [2010/02/15 15:25]
gauryan
study:java:javachobo:ch8 [2010/03/08 08:51] (현재)
gauryan
줄 53: 줄 53:
                  
         for( int i = 0 ; i < 10 ; ++i ) {         for( int i = 0 ; i < 10 ; ++i ) {
-            result = number / (int)(Math.random() 10); // 7번째 라인, 예외 발생+            result = number / (int)(Math.random() 10); // 7번째 라인, 예외 발생
             System.out.println(result);             System.out.println(result);
         }         }
줄 68: 줄 68:
         for( int i = 0 ; i < 10 ; ++i ) {         for( int i = 0 ; i < 10 ; ++i ) {
             try {             try {
-                result = number / (int)(Math.random() 10); // 7번째 라인, 예외 발생+                result = number / (int)(Math.random() 10); // 7번째 라인, 예외 발생
                 System.out.println(result);                 System.out.println(result);
             } catch (ArithmeticException e) {             } catch (ArithmeticException e) {
줄 125: 줄 125:
 ===== 예외 클래스의 계층구조 ===== ===== 예외 클래스의 계층구조 =====
   * 예외클래스 계층도 <code>   * 예외클래스 계층도 <code>
-Object --- Throwable -+- Error    -+- OutOfMemoryError +Object --- Throwable -+- Error     -+- OutOfMemoryError 
-                      |            +                      |             
-                      |            +- ...+                      |             +- ...
                       |                         |  
-                      + Exception -+- IOException +                      +Exception -+- IOException 
-                                   +                                    
-                                   +- ... +                                    +- ... 
-                                   +                                    
-                                   +- RuntimeException+                                    +- RuntimeException
 </code> </code>
   * 예외클래스는 다음과 같이 두 개의 그룹으로 나눠질 수 있다.   * 예외클래스는 다음과 같이 두 개의 그룹으로 나눠질 수 있다.
줄 183: 줄 183:
 } }
 </code> </code>
 +
 ===== 예외 발생시키기 ===== ===== 예외 발생시키기 =====
   * 키워드 throw 를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있으며, 방법은 아래의 순서를 따르면 된다.   * 키워드 throw 를 사용해서 프로그래머가 고의로 예외를 발생시킬 수 있으며, 방법은 아래의 순서를 따르면 된다.
줄 191: 줄 192:
 throw e; throw e;
 </code> </code>
- +  * [예제 8-9] /ch8/ExceptionEx9.java <code java>
-  * [예제 8-9] /ch8/ExceptionEx9.java <code>+
 class ExceptionEx9 { class ExceptionEx9 {
     public static void main(String[] args) {     public static void main(String[] args) {
줄 207: 줄 207:
 } }
 </code> </code>
 +
 ===== 예외의 발생과 catch블럭 ===== ===== 예외의 발생과 catch블럭 =====
   * 첫 번째 catch블럭부터 차례로 내려가면서 catch블럭의 괄호()내에 선언된 참조변수의 종류와 생성된 예외클래스의 인스턴스에 **''instanceof''** 연산자를 이용해서 검사하게 되는데, 검사결과가 true인 catch블럭을 만날 때까지 검사는 계속된다.   * 첫 번째 catch블럭부터 차례로 내려가면서 catch블럭의 괄호()내에 선언된 참조변수의 종류와 생성된 예외클래스의 인스턴스에 **''instanceof''** 연산자를 이용해서 검사하게 되는데, 검사결과가 true인 catch블럭을 만날 때까지 검사는 계속된다.
줄 238: 줄 239:
         } catch (ArithmeticException ae) {         } catch (ArithmeticException ae) {
             if(ae instanceof ArithmeticException)             if(ae instanceof ArithmeticException)
-                Ssystem.out.println("true");+                System.out.println("true");
             System.out.println("ArithmeticException");             System.out.println("ArithmeticException");
         } catch (Exception e) {      // ArithmeticException을 제외한 모든 예외가 처리된다.         } catch (Exception e) {      // ArithmeticException을 제외한 모든 예외가 처리된다.
줄 410: 줄 411:
  
   * 결국, 어디서 든 간에 반드시 try-catch문을 사용해서 예외처리를 해주어야 정상적인 종료를 할 수 있을 것이다.   * 결국, 어디서 든 간에 반드시 try-catch문을 사용해서 예외처리를 해주어야 정상적인 종료를 할 수 있을 것이다.
- 
 ===== 예외 되던지기 ===== ===== 예외 되던지기 =====
 +  * 하나의 예외에 대해서 예외가 발생한 메서드와 호출한 메서드, 양 쪽에서 처리하도록 할 수 있다.
 +  * 이것은 예외를 처리한 수에 인위적으로 다시 발생시키는 방법을 통해서 가능한데, 이것을 **예외 되던지기** (exception re-throwing)이라고 한다.
 +  * [예제 8-23] /ch8/ExceptionEx23.java <code java>
 +class ExceptionEx23 {
 +    public static void main(String[] args) {
 +        try {
 +            method1();
 +        } catch (Exception e) {
 +            System.out.println("main메서드에서 예외가 처리되었습니다.");
 +        }
 +    }
 +    
 +    static void method1() throws Exception {
 +        try {
 +            throw new Exception();
 +        } catch (Exception e) {
 +            System.out.println("method1메서드에서 예외가 처리되었습니다.");
 +            throw e; // 다시 예외를 발생시킨다.
 +        }
 +    }
 +}
 +</code>
 ===== 사용자정의 예외 만들기 ===== ===== 사용자정의 예외 만들기 =====
 +
 +  * 기존의 정의된 예외 클래스 외에 필요에 따라 프로그래머가 새로운 예외 클래스를 정의하여 사용할 수 있다. 보통 Exception클래스로부터 상속받는 클래스를 만들지만, 필요에 따라서 알맞은 예외 클래스를 선택할 수 있다. <code java>
 +class MyException extends Exception {
 +    MyException(String msg) { // 문자열을 매개변수로 받는 생성자
 +        super(msg);           // 조상인 Exception클래스의 생성자를 호출한다.
 +    }
 +}
 +</code>
 +  * 필요하다면 멤버번수를 추가할 수 있다. <code java>
 +class MyException extends Exception {
 +    // 에러 코드 값을 저장하기 위한 필드를 추가했다.
 +    private final int errorCode = 100;
 +    
 +    MyException(String msg) { // 생성자
 +        super(msg);
 +    }
 +    
 +    public int getCode() {    // 에러 코드를 얻을 수 있는 메서드도 추가했다.
 +        return errorCode;     // 이 메서드는 주로 getMessage()와 함께 사용될 것이다.
 +    }
 +}
 +</code>
study/java/javachobo/ch8.1266215122.txt.gz · 마지막으로 수정됨: 2010/02/15 15:25 저자 gauryan