Test157~158 예외(Exception) 처리 - (4) 예외 다시 던지기
2020. 9. 22. 02:50
다음은 예외를 발생(throw)시키고 하고 던지기(throw) 하고 잡아(catch) 처리하는 코드이다.
예외 처리의 흐름을 잘 파악 해보자.
// 예외 다시 던지기 public class Test157 { public static void main(String[] args) { Test157 ob = new Test157(); try { int a = ob.getValue(-2); System.out.println("a : " + a); } catch (Exception e) { System.out.println("ⓑ printStackTrace..........."); e.printStackTrace(); } } public int getData(int data) throws Exception { if (data < 0) throw new Exception("data 가 0 보다 작습니다."); // ① 예외 발생 return data + 10; } // 잡아낸 예외 다시 던지는 것이 가능하도록 처리 public int getValue(int value) throws Exception { int a = 0; try { a = getData(-1); // ② 예외 발생 } catch (Exception e) // ③ 예외 잡아내기 { // ④ 잡아낸 예외에 대한 처리 System.out.println("ⓐ printStackTrace............"); e.printStackTrace(); // ⑤ 잡아낸 예외 다시 던지기 check~!!! throw e; //-- 주석 처리 시(즉, 잡아낸 예외를 다시 던지지 않을 경우) // getValue() 메소드를 호출하고 있는 main() 메소드의 // 예외 처리 구문은 수행되지 않게 된다. } return a; } }
실행 결과
// 실행 결과 /* ⓐ printStackTrace............ java.lang.Exception: data 가 0 보다 작습니다. at Test157.getData(Test157.java:30) at Test157.getValue(Test157.java:42) at Test157.main(Test157.java:15) ⓑ printStackTrace........... java.lang.Exception: data 가 0 보다 작습니다. at Test157.getData(Test157.java:30) at Test157.getValue(Test157.java:42) at Test157.main(Test157.java:15) 계속하려면 아무 키나 누르십시오 . . . */
// 다른 예외 다시 던지기 public class Test158 { public int getValue(int value) throws Exception // ⑦ 예외 던지기 { // (파란 폭탄) int a = 0; try { a = getData(-2); // ③ 예외 발생 } // (빨간 폭탄) catch (Exception e) // ④ 예외 잡아내기 { // (빨간 폭탄) // ⑤ 예외 처리(빨간 폭탄) System.out.println("printStactTrace............."); e.printStackTrace(); throw new Exception("value 가 음수입니다"); // ⑥ 새로운 예외 발생 } // (파란 폭탄) return a; } public int getData(int data) throws Exception // ② 예외 던지기 { // (빨간 폭탄) if (data<0) throw new Exception("data가 0 보다 작습니다."); // ① 예외 발생 // (빨간 폭탄) return data + 10; } public static void main(String[] args) { Test158 ob = new Test158(); try { int a = ob.getValue(-2); // ⑧ 예외 발생 System.out.println("a : " + a); // (파란 폭탄) } catch (Exception e) // ⑨ 예외 잡아내기 { // (파란 폭탄) System.out.println("printStackTrace............"); e.printStackTrace(); } } }
실행 결과
// 실행 결과 /* printStactTrace............. java.lang.Exception: data가 0 보다 작습니다. at Test158.getData(Test158.java:33) at Test158.getValue(Test158.java:15) at Test158.main(Test158.java:44) printStackTrace............ java.lang.Exception: value 가 음수입니다 at Test158.getValue(Test158.java:23) at Test158.main(Test158.java:44) 계속하려면 아무 키나 누르십시오 . . . */
'JAVA > 예외처리' 카테고리의 다른 글
Test155~156 예외(Exception) 처리 - (3) throw(사용자 정의 예외) (0) | 2020.09.22 |
---|---|
Test153~154 예외(Exception) 처리 - (2) throws(예외 떠넘기기) (0) | 2020.09.21 |
Test152 예외(Exception) 처리 - (1) 개요, try~catch 구문 (0) | 2020.09.21 |