1.Throw
Throw 예외처리는 예외가 예상되는 클래스와 메소드 이름 옆에 명시해줘야 하며
오류가 발생한다면 throw에 적어놓은 클래스가 작동한다.
다르게 말하면 책임을 다른 클래스에 전가한다고 할 수도 있으며
따로 만들어 예외상황을 대처할 수 있다.
Java에서 미리 만들어둔 다양한 Exception도 역시 사용 가능하다.
package chap07.exam07.turn; public class Sub { public void method1() throws NumberFormatException { // 2. method2()에게 일을 시킨다. method2(); // 5. main에 책임 전가 } public void method2() throws NumberFormatException { Integer.parseInt("asdfg"); // 3. 문제발생 // 4. method1에 책임 전가 } }
package chap07.exam07.turn; public class Main { // 비유로 폭탄돌리기 public static void main(String[] args) throws Exception { // 1.main에서 Sub.method1()에게 일을 시킨다. Sub sub = new Sub(); sub.method1(); // 6. 결국 JVM에 책임을 전가 - 예외 메세지만 뿌려준다. } }
2.커스텀 예외처리
Throw에 직접 작성한 클래스 파일을 지정하는 것이다. 예제를 확인해보자
package chap07.exam08.custom; // 처음에 exception을 상속하는데 일반 예외라서 컴파일러에 오류가 걸리므로 // runtime exception으로 변경 public class ReservedException extends RuntimeException { public ReservedException(String msg) { super(msg); } }
package chap07.exam08.custom; public class JoinMember { String[] reserved = {"admin", "tester", "member"}; public void regId(String userId) { // userId가 reserved에 있는 값과 일치 하면 안됨 for(String name : reserved) { if(name.equals(userId)) { // System.out.println("예약어 입니다."); // 예외 발생이 목적이므로 변경 // throw new XXXException("msg"); // throw new RuntimeException("실행 예외"); // throw new Exception("일반 예외"); // java에서 잡아주는 예외이므로 빨간줄 throw new ReservedException(userId + "는 예약어 입니다."); } } } }
package chap07.exam08.custom; public class Main { // 임의의 예외처리 만들기 public static void main(String[] args) { JoinMember join = new JoinMember(); join.regId("admin"); } }
'개념 및 코딩 > 06.기타' 카테고리의 다른 글
[JAVA]06-06.Generic (0) | 2018.09.03 |
---|---|
[JAVA]06-05.Object (0) | 2018.09.03 |
[JAVA]06-04.String (0) | 2018.09.03 |
[JAVA]06-02.예외처리 instance of, try catch (0) | 2018.09.03 |
[JAVA]06-01.중첩 클래스, 중첩 인터페이스 (0) | 2018.09.03 |