18일차 강의 정리


1. 예외처리

try { 

~~~

}catch(에러 e){

~~~

}

소스1

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
    
    int[] arr = {1,2,3,4,5};
    
    try {
        for(int i=0; i<=10; i++) {
            System.out.println("arr[" + i + "]=" + arr[i]);
        }
    } catch (ArrayIndexOutOfBoundsException ex) {     //예외처리->배열 인덱스오류(RuntimeException 도 가능)
        System.out.println(ex);
    }    
}
cs

결과1

-> System.out.println(ex);

-> ex.printStackTrace(); //콘솔창에 에러이름과 에러난 줄등의 상세한 정보출력

-> System.out.println(ex.toString());

-> System.out.println(ex.getMessage());

소스2-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int input = 0;
        
        try{
        System.out.print("숫자를 입력해주세요>>");
            input = Integer.parseInt(sc.nextLine());
            System.out.println("input: "+3/input);
//        }catch(NumberFormatException ex){
        }catch(RuntimeException ex){        //catch도 순서중요, 넓은 범위로 내려가는것이 좋다
            System.out.println(ex.getMessage());
            System.out.println("숫자!!!!!!!!!!!!!");
//        }catch(ArithmeticException ex){        //0으로 나누는지
//            System.out.println("0으로 나눌수 없습니다");
//            ex.printStackTrace();
        }catch(Exception ex){
            ex.printStackTrace();
        }
        
}//main end
cs

결과2-1

소스2-2

catch 순서 중요 -> Exception 을 상속하는 하위의 오류가 아래에 나와있으면 오류

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int input = 0;
    
    try{
    System.out.print("숫자를 입력해주세요>>");
        input = Integer.parseInt(sc.nextLine());
        System.out.println("input: "+3/input);
//        }catch(NumberFormatException ex){
//        }catch(RuntimeException ex){        //catch도 순서중요, 넓은 범위로 내려가는것이 좋다
//            System.out.println(ex.getMessage());
//            System.out.println("숫자!!!!!!!!!!!!!");
    }catch(ArithmeticException ex){        //0으로 나누는지
        System.out.println("0으로 나눌수 없습니다");
        ex.printStackTrace();
    }catch(Exception ex){
        ex.printStackTrace();
    }
    
}//main end
cs

결과2-2

소스3 (메소드에서 오류 던지기)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) throws Exception {
    
    try {
        func01();
    } catch (NumberFormatException e) {        //다중
        System.out.println("오류-숫자값이 아닙니다");
    } catch (ArithmeticException e) {
        System.out.println("오류-0으로 나눌수없습니다");
    } catch (Exception e) {
        e.printStackTrace();
    }
}//main end
 
public static void func01() throws Exception {     //오류시 던져
    System.out.println(Integer.parseInt("a"));    
    System.out.println(3 / 0);
}//func01() end
cs

결과3

func01() 의 내용 변경

1
2
3
4
public static void func01() throws Exception {     //오류시 던져
    System.out.println(Integer.parseInt("1"));    
    System.out.println(3 / 0);
}//func01() end
cs

결과3-1

소스4 (finally)

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
    try{
        System.out.println(3/0);
    }catch(Exception e){
        System.out.println("오류");
        return;
    }finally{    //반드시 실행한다
        System.out.println("1프로그램을 종료합니다.");
    }
    System.out.println("2프로그램을 종료합니다.");
}
cs

결과4

소스5

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
import java.util.Scanner;
 
class NumOutException extends Exception{        //Exception 을 상속하는 하위의 오류 class
    NumOutException(String msg){
        super(msg);
    }
}
 
public class Ex04 {
    public static void main(String[] args) {
        try{
            func01();
        }catch(NumOutException e){
            System.out.println("나이입력오류");
            e.printStackTrace();
        }
    }//main end
    
    public static void func01() throws NumOutException{
        Scanner sc = new Scanner(System.in);
        
        System.out.print("나이를 입력 : ");
        int age = Integer.parseInt(sc.nextLine());
        
        if(age<1){
            throw new NumOutException("나이를 " + age+"살로 입력했음");
        }
        
        System.out.println("당신의 나이는 "+age+"세 입니다");
    }//func02 end
}//class end
cs

결과5


*내가 만든 에러

소스

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
class Am05 extends Exception{
    public Am05(){
        super("내가만든에러");
    }
    @Override
    public String toString(){
        return "오류메시지";
    }
    public void func01(){
        System.out.println("이렇게도 가능");
    }
}
 
public class Ex05 {
    public static void main(String[] args) {
        Ex05 me = new Ex05();
        try{
            me.func01(1);
            System.out.println("여기까지 수행");
        }catch(Am05 e){
            System.out.println(e.toString());
            System.out.println(e.getMessage());
            e.func01();
            e.printStackTrace();
        }catch(Exception e){
            System.out.println("~~");
            e.toString();
        }
    }//main end
    void func01(int a) throws Am05{
//        System.out.println(3/0);
        Am05 ex = new Am05();
        throw ex;
    }//func01() end
}//class end
cs

결과


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

DAY19 예외처리2  (0) 2016.08.01
숫자 입력시 천단위 정규식  (0) 2016.08.01
DAY17 추상클래스&인터페이스  (0) 2016.07.26
DAY17 상속2(+캡슐화, 다형성)  (0) 2016.07.26
DAY16 상속1  (0) 2016.07.26

+ Recent posts