코드일기장

[Java] 연결된 예외 (예외처리1-6) 본문

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>

 

 

Comments