문서의 이전 판입니다!
try ~catch문의 구조
try {
// 예외가 발생할 가능성이 있는 문장 코드
} catch (Exception1 e1) {
// Exception1이 발생할 경우, 실행될 문장
} catch (Exception1 e2) {
// Exception2이 발생할 경우, 실행될 문장
...
} catch (ExceptionX eX){
// ExceptionX가 발생할 경우, 실행될 문장
}
package chapter11;
public class ExceptionEx0 {
public static void main(String[] args) {
System.out.println(1);
System.out.println(2);
System.out.println(3/0);
System.out.println(4);
System.out.println(5);
System.out.println(6);
}
}
package chapter11;
public class ExceptionEx {
public static void main(String[] args) {
System.out.println(1);
try {
System.out.println(2);
System.out.println(3/0);
System.out.println(4);
} catch(ArithmeticException e) {
System.out.println(5);
}
System.out.println(6);
}
}
| try 블록 안에서 예외가 발생한 경우 |
|---|
| - 발생한 예외와 일치하는 catch 문이 있는지 확인한다. |
| - 만약 일치하는 catch문이 있다면, 해당 catch문의 블럭 내의 실행문을 실행하고 전체 try-catch 구문이 종료된다. 만약 일치하는 catch문이 없으면 예외 처리를 하지 못한다. |
| try 블록 안에서 예외가 발생하지 않은 경우 |
| - catch 구문을 모두 확인하지 않고, 전체 try-catch 구문이 종료된다. |
package chapter11;
public class ExceptionEx2 {
public static void main(String[] args) {
System.out.println(1);
try {
System.out.println(2);
System.out.println(3);
System.out.println(4);
} catch(ArithmeticException e) {
System.out.println(5); // Death 코드 (실행될 일이 없다)
}
System.out.println(6);
}
}
다중 catch문
package chapter11;
public class ExceptionEx4 {
public static void main(String[] args) {
try {
int[] arr = {1,2,3};
System.out.println(arr[2]);
System.out.println(3/1);
Integer.parseInt("a");
} catch(ArithmeticException e) {
System.out.println("0으로 나눌 수 없음");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("인덱스 범위 초과");
}
}
}
| catch 문의 배치 순서 |
|---|
| 자식 Exception > Exception 순으로 배치 |
finally문
package chapter11;
public class ExceptionEx3 {
public static void main(String[] args) {
System.out.println("DB연결 시작");
try {
System.out.println("DB작업");
System.out.println(3/0);
} catch(Exception e) {
System.out.println("DB작업 중 예외발생");
} finally {
System.out.println("DB연결 종료");
}
}
}
| throw 키워드 사용 |
|---|
| throw new Exception( “ 예외 발생 ”); |
package chapter11;
public class ExceptionEx5 {
public static void main(String[] args) {
System.out.println("프로그램 시작");
try {
throw new Exception("예외 발생");
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("프로그램 종료");
}
}
메서드에서 예외 선언
void 메서드명() throws Exception1, Exception2... {
...
}
package chapter11;
public class ExceptionEx6 {
public static void main(String[] args) {
try {
first();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
static void first() throws Exception {
second();
}
static void second() throws Exception {
throw new Exception("예외 발생");
}
}
예외 재발생
package chapter11;
public class ExceptionEx7 {
public static void main(String[] args) throws Exception {
try {
first();
} catch (Exception e) {
System.out.println("main() 예외 처리");
System.out.println(e.getMessage());
throw e;
}
}
static void first() throws Exception {
try {
second();
} catch (Exception e) {
System.out.println("first() 예외 처리");
throw e; // 예외 재발생
}
}
static void second() throws Exception {
try {
throw new Exception("예외 발생");
} catch (Exception e) {
System.out.println("second() 예외 처리");
throw e; // 예외 재발생
}
}
}
public static void main(String[] args) throws Exception {
try {
first();
}
catch (Exception e) {
System.out.println("Main() 예외 처리");
System.out.println(e.getMessage());
throw e;
}
}
별도로 명시하지 않을 경우, 이 위키의 내용은 다음 라이선스에 따라 사용할 수 있습니다: CC Attribution-Share Alike 4.0 International