예외 클래스의 계층 구조
모든 예외의 최고 조상은 Exception클래스이다.
Exception
-- IOException
-- ClassNotFoundException
-- ...
-- RuntiomeException
ㄴ ArithmeticException
ㄴ ClassCastException
ㄴ NullpointException
ㄴ ...
ㄴ IndexOutOfBoundsException
예외처리, try-catch문
예외처리란, 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성 하는 것.
예외의 발생으로 인한 실행 중인 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는 것이다.
public static void main(String[] args) {
try {
// 예외가 발생할 가능성이 있는 문장
} catch (Exception e) {
// Exception이 발생 했을 경우, 이를 처리하기 위한 문장
} catch (Exception2 e2) {
// Exception2 발생 했을 경우, 이를 처리하기 위한 문장
} catch (Exception3 e3) {
// Exception3 발생 했을 경우, 이를 처리하기 위한 문장
}
}
하나의 try블럭에 하나 이상의 catch 블럭이 올 수 있으며, 이 중 발생한 예외의 종류와 일치하는 단 한 개의 catch블럭이 수행이 된다. 발생한 예외의 종류와 일치하는 catch블럭이 없으면 예외처리가 되지 않는다.
try-catch문의 흐름
1. try블럭 내에서 예외가 발생한 경우
-> 발생한 예외와 일치하는 catch블럭을 확인
-> 일치하는 catch블럭을 찾게 되면, catch블럭 내의 문장을 수행함
-> 문장 수행 후 try-catch문을 빠져나가서 다음 문장을 계속해서 수행.
코드
public static void main(String[] args) {
System.out.println("1");
System.out.println("2");
try {
System.out.println("3");
System.out.println(0/0); // 고의로 ArithmeticException을 발생 시킴
} catch (Exception e) {
System.out.println("4");
}
System.out.println("5");
}
결과
2. 예외가 발생하지 않은 경우
-> catch 블럭을 거치지 않고 try-catch문을 빠져나가서 다음 문장을 계속해서 수행.
코드
public static void main(String[] args) {
System.out.println("1");
System.out.println("2");
try {
System.out.println("3");
} catch (Exception e) { // 모든 예외의 최고 조상인 Eeception
System.out.println("4");
}
System.out.println("5");
}
결과
++ 모든 예외 클래스는 Exception클래스의 자손이므로, catch블럭의 괄호에 Exception클래스 타입의 참초변수를 선언해 놓으면 어떤 종류의 예외가 발생하더라도 이 catch블럭에 의해서 처리된다.
예제 코드
public static void main(String[] args) {
try {
System.out.println(0 / 0); // 고의로 ArithmeticException을 발생 시킴
} catch (ArithmeticException e) { // Eeception 보다 뒤에 올 수 없지
System.out.println("ArithmeticException");
} catch (Exception e) {
System.out.println("Exception"); // ArithmeticException을 제외한 모든 예외처리를 함
}
System.out.println("끄읕");
}
결과
printStackTrace() / getmessage()
예외가 발생했을 때 생성되는 예외 클래스의 인스턴스에는, 발생한 예외에 대한 정보가 담겨 있다.
printStackTrace()와 getMessage()를 통해서 이 정보들을 얻을 수 있음.
catch블럭의 괄호에 선언된 참조변수를 통해서 이 인스턴스에 접근할 수 있다.
이 참조변수는 catch블럭 내에서만 사용가능 하다.
printStrackTrace()
-> 예외 발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메세지를 화면에 출력함
getMessage()
-> 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻을 수 있음
참고: 자바의정석
예외처리 2( throw, throws, finally )
예외처리 1( try-catch, printStackTrace(), getmessage() ) 예외 클래스의 계층 구조 모든 예외의 최고 조상은 Exception클래스이다. Exception -- IOException -- ClassNotFoundException -- ... -- RuntiomeException ㄴ ArithmeticExceptio
bohyeon2.tistory.com
'백엔드개발자 > JAVA' 카테고리의 다른 글
[예외처리] getMessage() , toString(), printStackTrace() (0) | 2023.01.06 |
---|---|
예외처리 2( throw, throws, finally ) (0) | 2022.12.11 |
StringUtils (0) | 2022.09.25 |
getSession(), getSession(true), getSession(false) (0) | 2022.07.19 |
@Data , hashCode() (0) | 2022.05.16 |