일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 소수판정
- 재귀호출기본
- OOP
- 예외처리
- 자동 형변환
- 공개키 암호
- 암호론
- try&catch
- 자료구조
- 객체지향
- 2884
- 객체
- 클래스 패스
- HTML
- 알고리즘
- class
- LANG
- 형변환 연산자
- 현대암호
- JSP
- 프로그래밍
- BufferedWrite
- java
- 디렉티브
- lang package
- 백준 알고리즘
- 백준
- 연결된 예외
- bubble-sort
- jvm
Archives
- Today
- Total
코드일기장
[Java] 사용자 정의 예외, 예외 되던지기 (예외처리 1-5) 본문
사용자 정의 예외
- 프로그래머가 직접 예외 클래스를 만들 수 있다.
- 조상은 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
'Java' 카테고리의 다른 글
[Java] Object클래스의 메서드- equals() (0) | 2022.01.24 |
---|---|
[Java] 연결된 예외 (예외처리1-6) (0) | 2022.01.23 |
[Java] 메서드에 예외 선언, finally 블럭 (예외처리 1-4) (0) | 2022.01.12 |
[Java] JVM메모리 구조, 기본 재귀호출-팩토리얼 (0) | 2022.01.11 |
[Java] 멀티 catch 블럭, 예외 발생, checked와 unchecked (예외처리1-3) (0) | 2022.01.05 |