Java
[Java] 연결된 예외 (예외처리1-6)
codeStudy123
2022. 1. 23. 19:58
🎈 연결된 예외
- 한 예외가 다른 예외를 발생시킬 수 있다.
- 예외 A가 예외 B를 발생시키면, A는 B의 원인 예외 (cause exception).
두 예외를 연결 시키는 메서드는 initCause()
원인 예외를 반환할 때는 getCause()
🎈 코드 예시
더보기
package composite;
public class Main {
public static void main(String[] args) {
try {
install();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
static void install()throws InstantiationException {
try{
start();
}catch(MemoryException m) {
InstallExcetpion ie=new InstallExcetpion("설치중 예외발생");
ie.initCause(m);
throw ie;
}
}
static void start() {
throw new MemoryException("저장공간 부족");
}
}
class InstallExcetpion extends RuntimeException{
public InstallExcetpion(String str) {
super(str);
}
}
class MemoryException extends RuntimeException{
public MemoryException(String strs) {
super(strs);
}
}
MemoryException은 InstallExcetpion의 원인 예외이다. 그리고 예외를 InstallExcetpion으로 던진다.
즉, 예외 initCause(원인예외)
원인 예외 사용 이유
1. 여러 예외를 하나로 묶기 위해서.
2. checked 예외를 unchecked예외로 바꿀 때 사용
🎈 코드 예시
더보기
public static void main(String[] args) {
throw new RuntimeException(new InstallExcetpion(null));
throw new MemoryException("에러");
}
}
class InstallExcetpion extends Exception{
public InstallExcetpion(String str) {
super(str);
}
}
class MemoryException extends Exception{
public MemoryException(String strs) {
super(strs);
}
}
위 코드는 컴파일이 안된다. InstallException은 Exception의 자손이라 예외처리가 필수였지만 RuntimeException으로 감싸서 unchecked예외가 되었다.
커버사진
https://www.flaticon.com/free-icon/java_152760
<a href="https://www.flaticon.com/free-icons/java" title="java icons">Java icons created by Freepik - Flaticon</a>