자바 예외 API
오류 처리를 개체로 처리하며 관련 API를 JaVA SE에서 제공, 기본적인 오류 처리 객체들은 java.lang 패키지의 Exception과 Error로 구분됨
예외처리 객체 구조
java.lang의 Throwable이 최상위 클래스
Exception은 프로그램 내에서 발생하는 예외로서 프로그램 내에서 처리가능
Error는 JVM 내에서 발생하는 에러로서 프로그램 내에서 처리 불가능
예외 발생 원리
int arr[] = new int[3];
arr[3] = 30;
System.out.println("OK");
0~2 index까지 저장할 수 있는 배열에 인덱스 3번지를 찾아가지만 존재하지 않음
=> ArrayIndexOutOfBoundsException()
예외 처리 방법
try{
//실행문
}catch(변수 선언){
//예외 처리
}
try 문에 여러개의 catch문을 지정할 수 있음
finally 문
try 블록에서 사용한 자원을 해제하기 위한 목적을 갖고 있음, 예외 발생과는 상관없이 항상 실행
try{
//실행문
}catch(변수 선언){
//예외 처리
}finally{
}
try-with-resources
try-catch-finally문을 간단하게 사용할 수 있도록 JAVA SE 7 부터 제공
try 끝나면 자동으로 해제할 자원 객체 생성
try(클래스명 변수명 = new 클래스명()){
//실행문
}catch(변수 선언){
//예외 처리
}
try(FileInputStream fi = new FileInputStream("a.txt"))){
// 파일 처리 명령문
}catch(변수 선언){
// 예외 처리
}
==
try{
FileInputStream fi = new FileInputStream("a.txt");
}catch(변수 선언){
// 예외 처리
}fianlly{
fi.close();
}
하지만 자동으로 해제할 수 있는 객체는 java.lang.AutoCloseable 인터페이스를 구현한 객체만 가능
예외 던지기 : throws 문
try catch문처럼 고정된 예외 처리 방식이 아니라 메서드를 호추하는 곳에서 상황에 맞게 동적으로 예외 처리를 하고 싶다면 메서드 선언부에 throws 다음에 메서드 내에서 처리할 Exception 객체 선언
public void c() throws Exception{
//예외 발생
}
try catch
public void b(){
try{
c();
}catch(Exeption e){
// 예외처리
}
}
thrwos
public void b() throws Exception{
c();
}