⚡ 메소드 형태의 오류처리 선언 및 호출 방법
throws : 해당 메소를 실행시 예외처리 구분자를 필수로 적용시키는 형태
메소드에서 throws 실행시 반드시 try,catch로 받아야함
(협업할때 주로 사용)
package oop2; //메소드 형태의 오류처리 선언 및 호출 방법 public class ex5 { public static void main(String[] args) { ex5_box ex5 = new ex5_box(); try { //try{try{}}는 x //해당 메소드에서 throws이므로 무조건 try~catch 이용 ex5.abc(5000, "500a"); }catch(Exception e) { System.out.println(e); try { //재try로 실행하여 데이터를 다시 보냄(throws 이므로 무조건 사용) ex5.abc(5000, "500 0"); }catch(Exception e2) { System.out.println(e2); System.exit(0); } } } } class ex5_box { //예외처리를 기본적으로 적용 시킬 메소드 //받는쪽에서 예외처리를 해둠 - 보내는쪽에서 try,catch 써야함 public void abc(int no, String z) throws Exception { //여긴 try,catch x - 여긴 처리만 하는곳 int sum = no + Integer.parseInt(z); System.out.println(sum); } }
⚡ 외부클래스 throw 메소드 응용편
[ Exception 라이브러리 사용 ]
throw는 예외처리가 발생되면 상대방에게 에러 코드를 전송하며 , 재전송을 요청
코드의 가장 아래에 작성하게되며,
throw = return과 비슷한 성격
예외처리 결과에 대한 값을 호출한 메소드로 다시 return 시킴
재처리를 해줘야함(받는쪽,보낸쪽 크로스체크)
package oop2; //외부클래스 throw 메소드 응용편 public class ex6 { public static void main(String[] args) { ex6_box ex = new ex6_box(); try { //throws 메소드 이용 - try걸어줌 ex.abc("123"); }catch(Exception e) { System.out.println(e); } } } class ex6_box{ public void abc(String a) throws Exception,NumberFormatException { //코드에러 발생 int k = Integer.valueOf(a) + Integer.valueOf("200a"); //System.out.println(k); Exception ep = new Exception(); //Exception 라이브러리 throw ep; } }
⚡ throws , throw 모두 사용
package oop2; public class ex7 { public static void main(String[] args) { try { ex7_box ex = new ex7_box(); ex.abc("ok"); }catch(Exception e) { //상대방에서 처리된 사항을 확인하는 조건문 System.out.println(e.getMessage()); //throws 메소드의 문제사항 출력(상대방의 오류) if(e.getMessage() == null) { System.out.println("정상적으로 데이터를 처리하였습니다"); }else { System.out.println("오류 발생!"); } } } } class ex7_box { Exception ep = null; public void abc(String a) throws Exception{ //1.성공 또는 실패 모두 무조건 전송메세지 발송 // if(a == "ok") { // String key = "abc123"; // int keycode = Integer.valueOf(key); // }else { // this.ep = new Exception(); // throw this.ep; // } //2. 정상적으로 처리가 되었을 경우 null로 처리가 됨 : 자기코드 오류확인시 try { if(a == "ok") { String key = "123abc"; int keycode = Integer.valueOf(key); System.out.println(keycode); }else if(a == "no") { System.out.println("정상적처리완료"); } }catch(Exception e){ //상대방 코드에는 문제사항 미전달,자신의 코드오류만 출력 e.printStackTrace(); this.ep = new Exception(); throw this.ep; } } }
⚡ try,catch,finally, throws,throw 모두 사용
package oop2; import java.util.Scanner; public class ex8 { //값을 보내고, 결과값을 받는 코드 public static void main(String[] args) { Scanner sc = new Scanner(System.in); //1번. 상대방이 throws라서 try~catch 작성 try { System.out.println("첫번째 숫자를 입력하세요 : "); String a = sc.nextLine(); System.out.println("두번째 숫자를 입력하세요 : "); String b = sc.nextLine(); Integer result = new box8_box().files(a,b); //2번. //사용자 입력값 전송 및 결과 받음 System.out.println("결과 : " + result); }catch(NumberFormatException nfe){ System.out.println("데이터 전송 오류!"); }catch(Exception e) { //7번. 오류된 사항 확인시킴 System.out.println(e); //하단 throw에서 받은 e출력 }finally { //8번. 라이브러리 종료 sc.close(); //어찌됐든 일어나야하는 코드 작성 } } } class box8_box{ //값을 받고, 산술연산 후 결과값을 보내는 코드 public Integer files(String aa,String bb) throws Exception{ int sum = 0; try { //3번. 문제상황 감지 위해 try~catch 사용(문제 없으면 2번 실행) sum = Integer.parseInt(aa) + Integer.parseInt(bb); //문자를 숫자 변환 }catch(Exception e) { //4번.(3번 오류시) System.out.println("인자값 숫자변환 오류~!!!"); //5번. throw e; //6번. 문제 발생 => throw로 상대방에게 오류를 넘겨버림(상대방 catch 실행) } return sum; } }
⚡ 응용문제
package oop2; /* [응용문제] 스캐너 미사용 45 * 3 + 16 + 5 + 22 * 8 해당 계산된 최종값을 외부 클래스에 전송시킵니다. 해당 외부클래스에서 짝수일 경우 예외오류를 발생시킵니다 단, 홀수일 경우 "홀수값 입니다" 라는 결과값을 return으로 보냅니다. 최종 메인 메소드에서 결과값을 출력시키는 코드를 작성하시오. */ public class ex9 { public static void main(String[] args) { int sum = 45 * 3 + 16 + 5 + 22 * 8; try { ex9_box ex = new ex9_box(); String resultmsg = ex.abc2(sum); //값 전송 System.out.println(resultmsg); //리턴받은 결과값 출력 }catch(Exception e) { //System.out.println(e.getMessage()); //try~catch 사용시에는 x } } } class ex9_box { public String abc2(Integer a) throws Exception { //try~catch 사용 String msg = ""; try { if(a%2 == 0) { throw new Exception("올바르지 않은 값입니다2"); }else { msg = "홀수값입니다."; } }catch(Exception e) { System.out.println(e); } return msg; } public String abc(Integer a) throws Exception { //try~catch 사용x String msg = ""; if(a%2 == 0) { /* Exception ep = new Exception("예외처리 발생함. 해당결과 짝수값"); throw ep; //강제 catch 실행 */ throw new Exception("예외처리 발생함. 해당결과 짝수값"); //위에 두줄 짧게 작성 }else { msg = "홀수값입니다"; } return msg; } }