Throwable initCause(Throwable cause)
- 지정한 예외를 원인 예외로 등록Throwable getCause()
- 원인 예외를 반환void install() throws InstallException {
try {
startInstall(); // SpaceException 발생
copyFiles();
} catch (SpaceException e) {
InstallException ie = new InstallException("설치중 예외발생"); // 예외 생성 !!!
ie.initCause(e); // InstallException의 원인 예외를 SpaceException로 설정
throw ie; // InstallException 발생
} catch (MemoryException me) {
...
}
}
여러 예외를 하나로 묶어서 다루기 위해서
-> 위 예시에서 보듯이 InstallException에 SpaceException 넣고 MemoryException 넣고 ... catch문을 이용해서 넣으면됨)
checked 예외 (Exception 자손)
를 unchecked 예외 (RuntimeException 자손)
로 변경하려 할 때
// SpaceException, MemoryException 둘 다 예외 필수 처리
static void startInstall() throws SpaceException, MemoryException {
if(!enoughSpace())
throw new SpaceException("설치할 공간이 부족합니다.");
if(!enoughMemory())
throw new MemoryException("메모리가 부족합니다.");
}
class SpaceException extends Exception {
SpaceException(String msg) {
super(msg);
}
}
// RuntimeException 로 MemoryException을 감싸면 unchecked 예외 (예외 선택 처리)로 변경가능!
// SpaceException 예외 필수 처리, MemoryException 예외 선택 처리
static void startInstall() throws SpaceException {
if(!enoughSpace())
throw new SpaceException("설치할 공간이 부족합니다.");
if(!enoughMemory())
throw new RuntimeException(new MemoryException("메모리가 부족합니다."));
// MemoryException을 RuntimeException의 원인 예외로 등록
} // RuntimeException(Throwable cause) 꼴, initCause대신 RuntimeException 생성자 씀