티스토리 뷰

1. 사용자 정의 예외

- Java가 제공하는 예외 이외의 예외를 만들 수 있다.

- 일반적으로 어플리케이션에서 의도된 예외를 던질 때 사용한다.

실습1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.ktds.jmj;
 
 
//외워야한다. 
public class InvalidNumberException extends RuntimeException { // 예외를 만들때 반드시 extends를 붙여야한다. 
    
    public InvalidNumberException() {
        super();
    }
    
    public InvalidNumberException( String msg ) {
        super(msg);
    }
    
    public InvalidNumberException( Throwable t ) { // 최상위 예외 클래스 Throwable (모든 예외를 다 포함한다.)
        super(t);
    }
    
    public InvalidNumberException ( String msg, Throwable cause) {
        super(msg, cause);
    }
 
        
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
    }
}
cs

 

2. Try ~ catch ~ finally

- 예외의 발생여부와 상관 없이 무조건 수행하는 finally 영역.

실습1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.ktds.jmj;
 
public class FinallyTest {
 
    public static void start(){
        
        try//try > catch > finally
            //int number = Integer.parseInt("abd");
            int number = Integer.parseInt("123"); //에러가 발생하지 않으면 11번의 nullpointer에러는 잡는다.
            
            String str = null//8번에서 에러가 발생하면 바로 15번줄 catch로 넘어가서 무시당한다.
            str.length(); //NullPointer 에러발생
            
            System.out.println(number);
        }
        catch (NumberFormatException | NullPointerException nfe) {
            System.out.println("숫자 변환에 실패했습니다. " + nfe.getMessage());
            if (nfe instanceof NumberFormatException){ // NumberFormatException의 인스턴스인가
                System.out.println("숫자변환을 할 수 없습니다.");
            }
            else if ( nfe instanceof NullPointerException ){
                System.out.println("잘못된 참조입니다.");
            }
        }
        
/*        catch (NullPointerException npe){ // catch를 또 추가하면 11번라인도 에러를 잡아낸다.
            System.out.println("잘못된 참조입니다. 객체가 null이 아닌지 확인하세요.");
        }*/
        
        finally { // 에러가 발생하든 안하든 수행된다.
            System.out.println("숫자 변환을 종료합니다.");    
        }
    }
 
    public static void main(String[] args) {
        // FinallyTest test = new FinallyTest();
        // test.start();
 
        // this.start(); start()에 static이 붙으면 this.로 접근 못한다. static void
        // start()로 생성한후 메인에서 FinallyTest.start()로 접근
        // 독립적인 메모리에 접근하는 방법 첫번째는 static을 붙이는 방법, 두번째는 10 11 라인과 같은 인스턴스화 방법이
        // 있다.
        FinallyTest.start();
 
    }
 
}
 
cs

 

 

 

 

 

3. 예외 처리 책임 전달

- 현재 메소드에서 예외가 발생할 때 예외 처리에 대한 책임을 호출자에게 넘긴다.

실습1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.ktds.jmj;
 
public class MakeExceptions {
    
    /**
     * 문자를 숫자로 변환한다.
     * 만약, 예외상황이 발생하면 적절한 조치를 취해준다.
     * @param str
     * @return
     */
    public int parseInt(String str) {
        
        try {
            return Integer.parseInt(str);
        }
        catch( NumberFormatException nfe ){
            return 0;
        }
        
    }
    /**
     * 문자를 숫자로 변환한다.
     * 만약, 예외상황이 발생하면 적절한 조치를 취하지 않는다.
     * @param str
     * @return
     * @throws NumberFormatException
     */
/*    public int parseInt2( String str ) throws NumberFormatException, NullPointerException { // 처리의 책임을 전가한다.
        return Integer.parseInt(str);
    }*/
    public int parseInt2( String str ) throws NumberFormatException { // 처리의 책임을 전가한다.
        return Integer.parseInt(str);
    }
    
/*    public int parseInt3( String str ) throws InvalidNumberException { // 반드시 throws로 던져야한다. 
 * ***extends로 예외를 생성했을때 
        
        try {
            return Integer.parseInt(str);
        }
        catch (NumberFormatException nfe) {
            System.out.println(str +"은 숫자로 바꿀수없다.");
            //throw nfe;
            InvalidNumberException ine = new InvalidNumberException(str +"은 숫자로 바꿀수없다.");
            throw ine; // 반드시 throw를 던져야한다.
            //InvalidNumberException 이 Exception의 한 종류이기 때문에 반드시 throw를 던져야한다.
        }
    }*/
    
    public int parseInt3( String str ) { // throws를 적지않아도 된다. runtimeException으로 예외를 생성했을 때
        
        try {
            return Integer.parseInt(str);
        }
        catch (NumberFormatException nfe) {
            System.out.println(str +"은 숫자로 바꿀수없다.");
            //throw nfe;
            InvalidNumberException ine = new InvalidNumberException(str +"은 숫자로 바꿀수없다.");
            throw ine; // 반드시 throw를 던져야한다.
            //InvalidNumberException 이 Exception의 한 종류이기 때문에 반드시 throw를 던져야한다.
        }
    }
 
 
}
 
cs
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함