🌱 오늘의 주제 : try - catch문
🌱 예외 클래스의 계층구조
- Exception 클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외.
- RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외.
🌱 예외 처리하기 - try - catch문
- 예외처리(exception handling)란, 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것.
- 예외처리 목적 : 비정상 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는 것.
<try - catch문>
try {
// 예외가 발생할 가능성 있는 문장들을 넣는다.
} catch (Exception1 e1) {
// Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception2 e1) {
// Exception2이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception3 e1) {
// Exception3이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
}
🌱 try-catch문에서의 흐름
- try 블럭 내에서 예외가 발생한 경우
- 발생한 예외와 일치하는 catch 블럭 체크.
- 일치하는 catch블럭을 찾게 되면, catch블럭 문장들을 수행하고 빠져나가서 그 다음 문자 수행. 일치하는 catch문 찾지 못하면 예외처리 못함.
- try 블럭 내에서 예외가 발생하지 않은 경우
- catch블럭을 거치지 않고 빠져나가서 수행 계속.
package try_catch;
public class Ex8_1 {
public static void main(String[] args) {
// try-catch
System.out.println(1);
try {
System.out.println(2);
System.out.println(3);
} catch (Exception e) {
System.out.println(4); //실행되지 않는다.
} //try-catch
System.out.println(5);
}
}
---- <결과>
1
2
3
5
package try_catch;
public class Ex8_2 {
public static void main(String[] args) {
// try-catch
System.out.println(1);// 실행.
try {
System.out.println(0/0); // 고의로 ArithmeticException 발생.
System.out.println(2); // 실행되지 않는다.
} catch (ArithmeticException ae) {
System.out.println(3); // 실행
} // try-catch
System.out.println(4); // 실행
}
}
-----
<결과>
1
3
4
package try_catch;
public class Ex8_3 {
public static void main(String[] args) {
// 예외의 발생과 catch 블럭
System.out.println(1);
System.out.println(2);
try {
System.out.println(3);
System.out.println(0/0); // 고의로 ArithmeticException 발생.
System.out.println(4); // 실행되지 않는다.
} catch (Exception e) { //ArithmeticException 대신 Exception을 사용. (Exception은 조상)
System.out.println(5);
} // try-catch
System.out.println(6);
}
}
----< 결과>
1
2
3
5
6
🌱 printStackTrace()와 getMessage()
- 예외가 발생했을 때 생성되는 예외 클래스의 인스턴스에는 예외 정보가 담겨있으며, getMessage()와 printStackTrace()를 통해서 정보를 얻을 수 있다.
- 참조변수를 통해 이 인스턴스에 접근 가능.
- catch블럭 내에서만 사용 가능.
printStackTrace() : 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
package try_catch;
public class Ex8_5 {
public static void main(String[] args) {
// printStackTrac()와 getmessage()
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) {
ae.printStackTrace(); // 참조변수 ae를 통해, 생성된 ArithmeticException 인스턴스에 접근할 수 있다.
System.out.println("예외메시지 : " + ae.getMessage());
} //try catch문
System.out.println(6);
}
}
---< 결과>
1
2
3
예외메시지 : / by zero
6
java.lang.ArithmeticException: / by zero
at try_catch.Ex8_5.main(Ex8_5.java:12)
'Java' 카테고리의 다른 글
Java - 메서드에 예외 선언하기 (0) | 2023.02.21 |
---|---|
Java - checked 예외, unchecked 예외 (0) | 2023.02.21 |
Java - TreeSet (0) | 2023.02.15 |
Java - Stack과 Queue (0) | 2023.02.09 |
Java - 내부 클래스(inner class) (0) | 2023.02.07 |