예외(Exception): 오동작을 일으키거나 결과에 악영향을 미칠 수 있는 오류
- 문법에 맞지 않게 작성된 코드는 프로그램 실행 전 컴파일러에 의해 컴파일 오류로 걸러짐
- 예외는 프로그램 실행 중에 발생
- 정수를 0으로 나누는 경우, 배열의 크기보다 큰 인덱스로 배열에 접근하는 경우, 존재하지 않는 파일을 읽는 경우 등
- 실행 중 예외가 발생하면 자바 플랫폼이 실행 중인 응용프로그램에 예외를 전달
- 응용프로그램이 예외에 대처하는 코드를 가지고 있지 않다면 자바 플랫폼이 응용프로그램을 종료
예외 처리, try-catch-finally문
- 예외가 발생했을 때 대응하는 응용프로그램 코드
- try-catch-finally문 사용
try{
예외가 발생할 가능성이 있는 실행문(try블록)
}
catch(처리할 예외 타입 선언){
예외 처리문(catch블록)
}
finally{
예외 발생 여부와 관계없이 무조건 실행되는 문장
(finally블록)
}
- 예외가 발생할 가능성이 있는 실행문들을 try{} 블록, 예외 처리 코드를 catch{} 블록에
- catch()문의 () 안에는 처리할 예외 타입을 선언
- finally{} 블록 생략해도 무방
- 다수의 예외를 처리해야 할 때 여러 개의 catch 블록을 연속적으로 작성
- catch 블록은 예외마다 하나씩
- 발생한 예외와 타입이 일치하는 catch블록 실행
- 일치하는 catch블록이 없으면 프로그램 강제 종료
- catch 블록 내에서 System.exit(0)을 호출하면 언제든지 프로그램 종료 가능
- try블록에서 예외가 발생하지 않으면 catch블록을 건너뜀
- 예외가 발생하면 남은 try블록 실행문을 실행하지 않고 바로 catch블록의 예외 처리문으로 점프
자바의 예외 클래스
- 자바 플랫폼에서 제공하는 예외 클래스를 이용하여 예외 발생 탐지 가능

//배열의 범위를 벗어나 원소에 접근할 때 발생하는 ArrayIndexOutOfBoundsException 예외를 처리
int intArray[] = new int[5];
try{
intArray[3] = 2;
intArray[6] = 5; //예외 발생
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("배열 범위 초과);
}
예제 3-14 두 정수를 입력받아 나눗셈을 하고 몫을 구하는 코드 작성
- 나눗수에 0을 입력
- 사용자가 0을 입력하는 예외 상황을 컴파일 시에 미리 걸러낼 수 없음
- 예외가 발생할 때 응용프로그램이 이에 대응(handling)해 강제 종료되지 않게 할 수 있음
예제 3-15 try-catch 블록을 사용해 예제 3-14를 수정하여 정수를 0으로 나누는 경우에 "0으로 나눌 수 없습니다!"를 출력하고 다시 입력 받는 프로그램 작성
예제 3-16 배열의 인덱스가 범위를 벗어날 때 발생하는 ArrayIndexOutOfBoundsException을 처리하는 프로그램 작성
예제 3-17 3개의 정수를 입력받아 합을 구하고, 사용자가 문자를 입력하여 발생하는 InputMismatchException 예외를 처리하여 다시 입력받는 프로그램 작성
예제 3-18 문자열을 정수로 변환할 때 발생하는 NumberForException 예외를 처리하는 프로그램 작성
'안 씀 > java-개념' 카테고리의 다른 글
오름차순/내림차순 정수 정렬 (0) | 2024.05.11 |
---|---|
래퍼 클래스(wrapper class) (0) | 2024.05.11 |
main() 메소드 (0) | 2024.05.10 |
메소드에서 배열 리턴 (0) | 2024.05.08 |
다차원 배열 (0) | 2024.05.06 |