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

+ Recent posts