본문 바로가기

Programming/JAVA

JAVA 예외처리


  • 사용자에 의해서 발행하는 예외

          컴퓨터에 존재하지 않는 파일일 읽으려고 시도하거나, 배열크기 보다 큰 인덱스를 호출하거나 0으로 나누기
          등의 사용자의 실수에 의한 예외를 처리해 준다. Exception class 에서 처리한다.

  • 시스템에 의해 발생하는 예외

          스택영역에서 오버플로가 발생하거나, 메모리 용량 부족등으로 인한 에러를 처리해 준다
          Error class에 의해서 처리된다.


* 예외 처리 방식

try - catch - finally 블록 사용 , throws 구문을 이용해서 예외 발생 가능성 있는 문장을 선언

런타임 시스템은 try 블록 안에서 예외 발생시 예외를 throw 하여 핸들링 하고 무사히 예외가 처리된다면 프로그램을 계속 실행한다.

try {
           //예외 발생 가능성이 있는 코드

} catch (ExceptionType name) {
                      
                   //예외 발생시 수행되는 코드
}

이러한 형태로 예외를 처리하는 코드를 작성한다.

예외처리 example ) 

1.       public class HelloWorld {
2.                  public static void main(String[] args){
3.                            int i = 0;
4.
5.                           String greetings[] ={
6.                                           "Hello World!",
7.                                           "No, I mean it!",
8.                                           "HELLO WORLD!!"
9.                           };
10.                         try{
11.                             System.out.println(greetings[0]);
12.                             System.out.println(greetings[1]);
13.                             System.out.println(greetings[2]);
14.                             System.out.println(greetings[3]); // 예외발생
15                         }catch(ArrayIndexOutOfBoundsException e) {     //예외 객체 생성
16                              System.out.println(“배열 인덱스 값이 배열 사이즈보다 큽니다.”);     //예외 발생시 수행
17                         }
18.                }
19.     }



* finally 구문은 예외 발생과 상관없이 무조건 수행하는 코드이다.

try {
                     //예외 발생 가능성이 있는 코드

} catch (예외클래스) {
                    //예외 발생시 수행되는 코드
} finally {
                    //예외 발생 여부와 상관없이 무조건 수행되는 코드
}


* finally 구문이 수행되지 못하는 경우

1. 외부 원인으로 인해 프로그램이 갑자기 종료될 경우
2. finally 구문 이전에 System.exit(0) (프로그램 강제 종료) 코드가 있는 경우
   만약 finally 이전에 return 이 있다면, finally 구문을 수행한 뒤 종료한다.
3. finally 구문안에 또 다른 예외가 존재하는 경우


* throws

어떤 메소드 내부에서 발생한 예외를 일일이 try - catch 해주는 것은 매우 번거로운 일이기 때문에  throws를 사용하여 그 메소드를 호출한 지점으로 예외를 던져주는 효과를 가질 수 있다. 다음 예제 에서는 메소드의 예외를 그 메소드를 호출한 곳으로 계속 넘겨주다가 try - catch 로 처리하는 것을 볼 수 있다.

1.        public class ThrowsTest {
2.
3.                  public static void main(String [] args) {
4.
5.                            try
6.                           {
7.                                         second();
8.                            }
9.                           catch (Exception e)
10.                         {
11.                                  System.out.println(e);
12.                          }
13.             }
14.
15.             public static void second() throws ArithmeticException {
16.
17.                             first();
18.             }
19.
20.
21.             public static void first() throws ArithmeticException{
22.
23.                                 int i = 10, j = 0;
24.                                System.out.println(i/j);
25.
26.                    }
27.       }





* 사용자 정의 예외

사용자가 직접 예외 클래스를 java.lang.Exception 클래스를 상속 받아서 지정할 수 있다.

class MyException extends Exception {
         
            public MyException() {
                        super(" I am not your father ");
            }
 }
 
* throw 를 이용한 예외 강제 발생

 throw new MyException();    이런 방식으로 throw new 예외클래스이름();  으로 예외를 강제 발생시킬 수 있다. 

  




'Programming > JAVA' 카테고리의 다른 글

JAVA Thread ( Cont. )  (0) 2010.02.24
JAVA Thread  (0) 2010.02.23
JAVA Collection API  (0) 2010.02.23
JAVA String 과 StringBuffer  (0) 2010.02.23
JAVA 중첩클래스 ( Nested Class )  (0) 2010.02.22