프로그램 오류 종류
- 컴파일 에러 ( compile-time error ) : 컴파일 도중 발생하는 오류
- 런타임 에러 ( runtime error ) : 실행 도중 발생하는 오류
예외 클래스 계층도
Exception 타입의 클래스 ( RuntimeException 타입의 클래스 제외 ) : 외적인 요인에 의해 발생하는 예외
RuntimeExcaption 타입의 클래스 : 프로그래머의 실수로 발생하는 예외
Exception을 처리하지 못하면 프로그램은 종료되며, 원인이 된 Exception을(uncaught exception) JVM의 UncaughtExceptionHandler가 받아서 화면에 출력해 준다.
* 이클립스 상속 계층도 단축키 : ctrl + t
try-catch문
try {
// 예외 발생 가능성 있는 코드
} catch (Exception e){
// 예외 발생 시 동작하는 코드
} finally {
// 예외 발생 여부 관계없이 무조건 실행하는 코드
// 예외 발생시 : try - catch - finally
// 예외 발생 x : try - finally
}
public class Test {
public static void main(String[] args) {
int[] a = new int[5];
// ArrayIndexOutOfBoundsException예외 발생
try {
a[5] = 10;
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("배열의 범위를 벗어남");
e.printStackTrace();
}
}
}
* 이클립스 단축키 : 범위주석 후 Alt + shift + z
예외 처리 과정
try문에서 예외 발생 시 그 코드 다음부터는 실행되지 않으며 heap에 예외 타입의 인스턴스가 생성된다. catch문의 파라미터의 타입과 예외 인스턴스의 타입을 instanceof 연산자로 검사한 뒤 결과가 true이면 해당 catch블록을 실행한다.
public class Test {
public static void main(String[] args) {
int[] a = new int[5];
// ArrayIndexOutOfBoundsException예외 발생
try {
a[5] = 10;
} catch (ArrayIndexOutOfBoundsException e2) {
System.err.println("배열의 범위를 벗어남");
e2.printStackTrace();
System.out.println(e2.getMessage());
}
}
}
printStackTrace() : 예외 발생 당시 call stack에 있었던 메서드의 정보와 예외 메시지를 출력한다. ( return 타입 : void )
java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at test.Test.main(Test.java:9)
getMessage() : 예외 인스턴스에 저장된 메시지를 출력한다. ( return 타입 : String )
Index 5 out of bounds for length 5
멀티 catch 블록
두 예외클래스의 타입이 다르고 catch의 코드가 동일할 경우 하나의 catch문에 두 개의 클래스타입을 선언 작성 가능하다.
ex)
try {
} catch ( 예외타입1 | 예외타입2 변수명 ) {
}
* 두 개의 타입이 부모 자식 관계일 경우 부모 타입으로 통일한다.
* 멀티 catch 블록을 사용할 경우 하나의 타입에만 있는 메서드는 사용 불가능 ( 타입 구분 불가 )
하지만 굳이 사용하려면 instanceof 연산자로 타입을 검사한 뒤 사용
'Java' 카테고리의 다른 글
사용자 정의 예외 (0) | 2023.05.24 |
---|---|
throw, checked - unchecked 예외, throw (0) | 2023.05.23 |
익명 클래스(anonymous class) (0) | 2023.05.18 |
초기화 블록 (0) | 2023.05.15 |
인터페이스(interface) (0) | 2023.05.12 |