예외처리
try {
} catch (Exception1 e1) {
} catch (Exception2 e2) {
} catch (ExceptionN eN) {
}
- try 블럭 내에서 예외가 발생한 경우
(1) 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.
(2) 일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행.
만일 일치하는 catch블럭을 찾지못하면 예외는 처리되지 못한다.
-> 프로그램 종료 (비정상적인 종료)
- try 블럭 내에서 예외가 발생하지 않은 경우
(1) catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.
public class Ex {
public static void main(String[] args) {
System.out.println(1);
try {
System.out.println(2);
System.out.println(3);
} catch (Exception e) {
System.out.println(4);
}
System.out.println(5);
}
}
public class Ex {
public static void main(String[] args) {
System.out.println(1);
try {
System.out.println(0/0);
System.out.println(2);
} catch (ArithmeticException ae) {
System.out.println(3);
}
System.out.println(4);
}
}
예외의 발생과 catch블럭
- 예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감
- 일치하는 catch블럭이 없으면, 예외는 처리안됨
- Exception이 선언된 catch블럭은 모든 예외 처리(마지막 catch블럭)
public class Ex {
public static void main(String[] args) {
System.out.println(1);
System.out.println(2);
try {
System.out.println(3);
System.out.println(0/0);
System.out.println(4);
} catch (ArithmeticException ae) {
if (ae instanceof ArithmeticException)
System.out.println("true");
System.out.println("ArithmeticException");
} catch (Exception e) {
System.out.println("Exception");
}
System.out.println(6);
}
}
- 예외가 처리되면 try-catch문 빠져나감! (그 다음 catch문부터는 실행되지 않는다는 말)
public class Ex {
public static void main(String[] args) {
System.out.println(1);
System.out.println(2);
try {
System.out.println(3);
System.out.println(args[0]);
System.out.println(4);
} catch (ArithmeticException ae) {
if (ae instanceof ArithmeticException)
System.out.println("true");
System.out.println("ArithmeticException");
}
System.out.println(6);
}
}