실행 오류시 비정상 종료는 서비스 운영에 치명적
자바는 예외처리를 통하여 프로그램의 비정상 종료를 막고 log(흔적)를 남길 수 있다.
에러(error) : 개발자가 해결할 수 없는 치명적인 오류
예외(exception) : 개발자가 해결할 수 있는 오류
예외가 발생하면 비정상적인 종료를 막고 프로그램을 계속 진행할 수 있도록 우회 경로를 제공하는 것이 바람직
실행 중 오동작이나 결과에 악영향을 미치는 상황 발생
실행 중 예외 발생하면 자바 플랫폼은 응용프로그램이 예외를 처리하도록 호출
예외 발생 경우 :배열의 크기보다 큰 인덱스로 배열의 요소에 접근하는 경우
정수를 읽는 코드가 실행될 때 사용자가 문자를 입력하는 경우(자료형이 맞지 않아서 생기는 오류)
정수를 0으로 나누는 경우,
클래스명에 able이 붙는 경우 대부분 인터페이스 일 가능성이 높다.
모든 예외 클래스의 최상위 클래는 Exception.
다양한 예외 클래스가 제공됨
RuntiomeException : 실행 오류 예외 처리
IOExcoption : 입출력 예외처리
런타임시 발생하며 컴파일러가 예외 처리 여부를 확인하지 않음
개발자가 예외처리 코드의 추가 여부를 결정
컴파일라는 오류가 발생할 가능성을 발견하면 컴파일 오류를 발생시킴
개발자는 예외 처리 코드를 반드시 추가해야 함
try{
예외가 발생할 가능성이 있는 실행문(try블록)
}
catch(처리할 예외 타입 선언){
예외처리문 catch 출력
}
public class ZeroDivideTest {
public static void main(String[] args) {
int[] num = { 1, 2, 3, 4, 5 };
try { // 오류가 생길 가능성이 있는 코드는 try블록에 코딩
for (int i = 0; i <= num.length; i++)
System.out.println(num[i]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e); //오류원인 출력
System.out.println("예외 처리 부분");
}
System.out.println("프로그램 종료");
}
}
finally에서 프로그램 리소스를 정리함
try{}블럭이 실행되면 finally{}블록은 항상 실행됨
리소스를 정리하는 코드를 각 블록에서 처리하지않고 finally에서 처리함
try{
예외가 발생할 수 있는 부분
} catch(처리할 예외 타입 e){
예외를 처리하는 부분
} finally{
항상 수행되는 부분
}
리소스를 자동 해제 하도록 제공해주는 구문
close()를 명시적으로 호출하지 않아도 try{}블록에서 열린 리소스는 정상적인 경우, 예외 발생한 경우 모두 자동 해제됨.
조건 :
.
.
예외 발생 시 예외 처리를 직접하지않고 호출한 곳으로 넘긴다.
(=예외 처리 미루기)
메소드를 호출하여 사용하는 곳, 즉 메소드명을 기재한 곳에서 예외처리한다는 뜻.
ex)
public void firsrMethod() throws Exception{
}