예외가 발생한 곳에서 try ~ catch 블록으로 예외를 직접 처리할 수 있지만,
자신이 직접 처리하지 않고, 메서드를 호출한 곳으로 예외를 위임(떠넘김) 할 때
throws 키워드를 사용한다.
에외 처리를 위임받은 메서드는 다시 예외 처리에 대한 책임이 발생하며,
자신이 직접 처리하거나 또 다른 곳으로 위임할 수 있음.
최종적으로 마지막 단계의 메서드에서는 try ~ catch 블록을 통해 처리해야함
(ex, 자바에서는 main() 메서드)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public static void 대리1() throws ArithmeticException {
System.out.println(3 / 1); // 예외 발생하는 코드
}
public static void 대리2() throws ClassNotFoundException {
Class.forName("asdad");
}
public static void 과장() throws ArithmeticException, ClassNotFounException {
대리1();
대리2();
}
public static void 부장() throws Exception {
과장();
}
public static void main(String[] args) {
try {
부장();
} catch (Exception e) {
System.out.println("사장이 모든 예외를 처리");
}
}
|
cs |
사용자 예외 발생(throw)
자바 기준으로 예외가 아닌 상황에서도 개발자의 의도대로 예외를 발생시키는 것
throw 키워드를 사용하여 발생시킬 예외 클래스의 객체를 지정(강제 예외 발생)
일반적으로 예외객체는 한 번 발생시키면 재사용할 일이 없으므로
별도의 변수 없이 바로 임시 객체 형태로 사용하는 경우가 많음
(throw 변수명 또는 new 예외클래스명())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class InvalidScoreException exteds Exception {
// 생성자를 정의하여 예외 메세지를 슈퍼클래스의 생성자에 전달
public InvalidScoreException(String message) {
super(message);
}
}
public static void exceptionMethod(int score) throws Exception {
if (score < 0 || score > 100) {
throw new InvalidScoreException("점수입력오류^^");
} else {
}
}
public static void main(String[] args) {
try {
exceptionmethod(105);
} catch (Exception e) {
e.printStackTrace();
}
}
|
cs |
'Language > Java' 카테고리의 다른 글
Thread(쓰레드) (0) | 2020.07.07 |
---|---|
예외(Exception) (0) | 2020.07.06 |
정규표현식 (0) | 2020.07.06 |
StringTokenizer~format (0) | 2020.07.06 |
시간 관련 클래스 및 패키지 (0) | 2020.06.25 |