- if else와 달리 try-catch는 블럭내에 포함된 문장이 하나여도 {} 를 생략할 수 없다.
- try 블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 여러개의 catch블럭을 사용할 수 있다.
- catch 내에 또 다른 try-catch 블럭을 사용할 수 있는데 이때는 다음과 같이 변수 e를 중복해서 사용할 수 없다.
- 하나의 try 문에서 여러 개의 예외가 발생할 수 있지만 동시에 발생하지는 않음
- 하나의 예외가 발생하면 즉시 try 블록의 실행을 멈추고 해당 catch 블록으로 이동
- 예외 발생 여부와 관계없이 무조건 수할 실행문이 있다면 try~catch 문에 finally 블록 추가
- 다중 catch 블록일 때 try 블록에서 예외가 발생하면 발생한 예외를 catch 블록 순서대로 비교
- 앞에 있는 catch 블록의 예외 객체가 나중 catch 블록 예외 객체의 부모라면 앞에 있는 catch 블록이 먼저 가로챔 -> 컴파일러는 오류를 발생시킴
- 구체적인 예외를 먼저 처리해야 함.
- printStackTrace(): 예외발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
- getMessage(): 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
Try-catch 문의 실행순서
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class ExceptionEx {
public static void main(String args[]) { // 0으로 나눠서 고의로 ArithmeticException을 발생시킨다.
System.out.println("try~catch 실행 순서");
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) {
System.out.println(5);
} // try-catch의 끝
System.out.println(6);
} // main메서드의 끝
}
|
cs |
rebeccacho.gitbooks.io/java-study-group/content/chapter8.html
'JAVA > basic' 카테고리의 다른 글
generic / 제네릭 (0) | 2020.10.22 |
---|---|
예외처리 / Exception (0) | 2020.10.21 |
예외처리 / throw (0) | 2020.10.21 |
인터페이스 / interface / implements (0) | 2020.10.20 |
추상클래스 / abstract class (0) | 2020.10.20 |
오버라이딩 Override / Overriding & 다형성 (0) | 2020.10.16 |
상속 / extends (0) | 2020.10.15 |