Java
[Java] 사용자 정의 예외, 예외 되던지기 (예외처리 1-5)
codeStudy123
2022. 1. 16. 22:01
사용자 정의 예외
- 프로그래머가 직접 예외 클래스를 만들 수 있다.
- 조상은 Exception과 RuntimeException 중에서 선택하면 된다.
class Excetpion1 extends Exception{
Excetpion1(String str){ //거의 필수적으로 넣는 코드이다.
super(str);
}
}
보통 예외처리 필수가 아닌 RuntimeException을 조상으로 한다.
결론적으로
사용자 예외 클래스가 Exception과 RuntimeException 둘 중 하나로 상속받아야 한다.
사용자 예외 클래스 생성자 (String 매개변수){ super(매개변수) } 이 또한 필수이다.
public class Hello {
public static void main(String[] args)throws MyException2 {
try {
start();
start2();
}catch(MyException me1) {
me1.printStackTrace();
}catch(MyException2 me2) {
System.out.println(me2.getMessage());
}
}
static void start()throws MyException{
throw new MyException("MyException 발생");
}
static void start2()throws MyException2{
throw new MyException2("MyException 발생");
}
}
class MyException extends RuntimeException{
MyException(String msg) {
super(msg);
}
}
class MyException2 extends Exception{
MyException2(String msg) {
super(msg);
}
packages.MyException: MyException 발생
at packages.Hello.start(Hello.java:17)
at packages.Hello.main(Hello.java:7)
예외 되던지기 (Exception re-throwing)
- 예외를 처리한 후에 다시 예외를 발생시킨다.
- 호출한 메서드와 호출된 메서드 양쪽 모두에서 예외처리하는 것
public class Hello {
public static void main(String[] args){
try {
catchmethod();
}catch(ReException r) {
System.out.println(r.getMessage());
System.out.print("main() 예외처리 성공");
}
}
static void catchmethod()throws ReException{
try {
throw new ReException("발생");
}catch(ReException re) {
System.out.println(re.getMessage());
System.out.println("catchmethod() 예외처리 성공");
throw re;
}
}
}
class ReException extends RuntimeException{
ReException(String msg) {
super(msg);
}
}
발생
catchmethod() 예외처리 성공
발생
main() 예외처리 성공
예외를 이미 처리했는데 왜 또 발생시켜서 던지는 것일까?
예외를 양쪽에서 처리해야 할 때가 분명 있을 수 있다.
지금까지 배운 내용으로 예외처리 방법은 크게 3가지인 것이다.
1. 바로 예외처리
2. 예외를 떠넘기기 호출시킨 쪽으로 떠넘기기
3. 예외를 처리한 후 다시 예외 던져서 호출한 메서드 쪽에서도 예외 처리하기
🚀 이전 글 보기 (예외처리 1-4)
커버사진
<a href="https://www.flaticon.com/free-icons/java" title="java icons">Java icons created by Freepik - Flaticon</a>
https://www.flaticon.com/free-icon/java_152760