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 |