작성
·
199
0
안녕하세요.
예외 처리 질문드립니다.
checked exception을 잡을 때 catch 블럭에서 임의로 발생시킨 MyCheckedException이 아닌 RuntimeException을 잡으려고 하면 여기서 예외 처리를 못하니 throws로 예외를 다시 던져줘서 코드가 에러가 없었는데,
unchecked exception을 잡을 때 똑같이 catch 블럭에서 발생된 MyUncheckedException이 아닌 다른 예외를 catch로 선언하고 나서 못 잡을 경우 밖으로 예외를 던지나 보려고 했는데 catch 에서 MyUncheckedException이 아닌 예외 중 어떤 건 에러가 안 나고 어떤 건 에러가 납니다.
예를 들어 NullPointerExceptoin으로 잡으려고 하면 코드에 이상이 없고, MyCheckedException으로 잡으려고 하면 에러가 발생합니다. 어차피 둘 다 catch 블럭에서 처리할 수 없어서 밖으로 던질텐데 왜 이런 걸까요 ?
public void callCatch(){
try{
client.call();
}catch(NullPointerException e){
System.out.println("예외처리, message = " + e.getMessage());
}
System.out.println("정상 흐름");
}
public void callCatch(){
try{
client.call();
}catch(MyCheckedException e){
System.out.println("예외처리, message = " + e.getMessage());
}
System.out.println("정상 흐름");
}
java: exception exception.basic.checked.MyCheckedException is never thrown in body of corresponding try statement
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
인프린님의 질문에 대한 해결책을 제시하는데 도움이 될 만한 유사한 컨텍스트의 정보를 찾았습니다. 이는 예외 처리의 기본 원리와, 특히 java에서의 checked exception과 unchecked exception의 처리 방법에 대한 이해를 돕기 위한 것입니다.
질문하신 내용과 밀접하게 연관된 내용은 아래의 링크에서 찾아볼 수 있습니다:
이 질의응답에서는 체크 예외와 런타임 예외(언체크 예외)의 기본적인 차이점과 그 사용 사례에 대해 설명하고 있습니다. 자바의 예외 처리 메커니즘에서, 체크 예외는 반드시 예외 처리 코드를 구현해주어야 하는 반면, 런타임 예외는 개발자의 선택에 따라 처리 코드를 작성할 수 있음을 설명하고 있습니다. 질문하신 내용에서 언급된 현상은 체크 예외와 런타임 예외 사이의 이러한 기본적인 차이 때문에 발생합니다. 체크 예외는 try 블록 내에서 발생 가능한 예외로 명시적으로 선언되어야 하고, 그렇지 않으면 컴파일 에러가 발생합니다. 반면, 런타임 예외는 명시적으로 선언하지 않아도 처리할 수 있으므로, NullPointerException과 같은 예외는 catch 블록에서 자유롭게 처리할 수 있습니다.
자세한 내용은 위 링크를 참조하시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.