public class TryCatchStudy1 {
public static void main(String[] args) {
try { //예외가 발생될 가능성이 있는 로직(source) 위치
int r1 = 10 / 0; //에러발생. println문 건너뛰고 catch로 이동
System.out.println("다음줄");
} catch (Exception e) { //예외가 발생되었을 때 하고 싶은 작업(로직) 위치
e.printStackTrace(); //에러문 출력
System.out.println("예외 발생!");
} finally { //옵션, 예외가 발생이 되든 안되든 무조건 실행하고 싶은 로직 위치
System.out.println("파이널리");
}
System.out.println("끝!");
}
}
Catch 구문은 계속 추가할 수 있고 예외종류에 따라 다르게 처리할 수 있다.
(Exception e)는 if문으로 비교하면 else구문에 해당하고, catch 구문이 여러 개라면 그들 중 가장 뒤에 위치해야한다.
public class TryCatchStudy5 {
public static void main(String[] args) {
try {
getConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getConnection() throws Exception{
System.out.println("DB 연결");
}
public static void otherGetConnection() throws Exception{
getConnection();
}
public static void otherGetConnection2() {
try {
getConnection();
} catch (Exception e) {
}
}
}
한 메소드나 클래스에서 throws를 통해 예외를 던지게 되면 받는 쪽에서 반드시 처리를 해야한다.
위 코드는 getConnection()을 호출한 곳에서 trycatch구문으로 감싸 정상적으로 작동한다.