try-catch-finally문
예외 처리 코드는 try-catch-finally블록을 이용해서 일반 예외와 실행 예외가 발생할 경우 예외 처리할 수 있도록 해준다.
try{
예외 발생 가능 코드
}catch(예외 클래스 e){
예외 처리
}finally{
항상 실행
}
일반 예외 처리는 컴파일러 과정에서 발생하기 때문에, 이클립스 빨간 밑줄을 그어 예외 처리 필요성을 알려준다.
public class TryCatchFinallyRuntimeException{
public static void main(String[] args){
String data1 = "안녕";
String data2 = "감사합니다";
try{
int value1 = Integer.parseInt(data1);
int value2 = Integer.parseInt(data2);
int result = value1 + value2;
System.out.println("결과 값"+result);
}catch(NumberFormatException e){
Systme.out.println("숫자로 변환할 수 없습니다");
}finally{
System.out.println("다시 실행하세요");
}
}
}
해당 코드를 실행시키면 "숫자로 변환할 수 없습니다"와 "다시 실행하세요"가 찍힌다. 여기서는 문자를 숫자로 변환하려고 했기 때문에 예외가 발생했다. 숫자 포맷과 관련 된 예외가 발생한 것(NumberFormatException e) finally는 성공하든, 실패하든 실행된다.
다중 catch
try-catch문 안에 다양한 예외가 발생할 수 있다. 다중 catch 블록을 작성하면 좋다.
try{
ArrayIndexOutofBoundsException 발생!할 경우 예외 처리 1
NumberFormatException 발생!할 경우 예외 처리 2
----- Exception 나머지 모든 예외? 예외 처리 3
}catch(ArrayIndexOutOfBoundsException e){
예외 처리1
}catch(NumberFormatException e){
예외 처리2
}catch(Exception e){
예외 처리3
}
모든 예외는 Exception클래스를 상속하고 있어서 Exception e로 모든 예외를 처리할 수 있다.
이 때 순서가 중요하다.
try{
ArrayIndexOutofBoundsException 발생!
NumberFormatException 발생!
----- Exception 나머지 모든 예외!
}catch(Exception e){
예외 처리1
}catch(NumberFormatException e){
예외 처리2
}catch(ArrayIndexOutOfBoundsException e){
예외 처리3
}
이 경우 ArrayIndexOutOfBoundsException도, NumberFormatException도 Exception도 모두 예외 처리1만 실행한다. 예외 처리2, 3은 실행이 되지 않는다. 각 예외 경우마다 다른 방식으로 처리 해줘야 하는데 문제가 생길 수 있다. 예외 걸러지는 순서를 잘 생각해야 한다.
멀티 catch
만약 NumberFormatException와 ArrayIndexOutOfBoundsException를 동시에 처리하고 싶다?
try{
ArrayIndexOutofBoundsException 발생!할 경우 예외 처리 1
NumberFormatException 발생!할 경우 예외 처리 1
----- Exception 나머지 모든 예외? 예외 처리 3
}catch(ArrayIndexOutOfBoundsException | NumberFormatException e){
예외 처리1
}catch(Exception e){
예외 처리3
}
반응형
'Java' 카테고리의 다른 글
예외 : 예외 떠넘기기 (0) | 2021.03.25 |
---|---|
예외 : try-with-resource (0) | 2021.03.25 |
예외 : 예외와 예외 클래스 (0) | 2021.03.25 |
어노테이션(Annotation) (0) | 2021.03.11 |
static과 싱글톤 (0) | 2021.03.11 |
Uploaded by Notion2Tistory v1.1.0