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