예외 발생 예 3가지
- FileNotFoundException : 파일을 찾을 수 없을 때 발생
- ArithmeticException : 산술에 문제가 있을 때 발생
- ArrayIndexOutOfBoundsException : 배열의 범위 바깥을 가리키는 경우 발생
예외 처리 (try ~ catch ~ finally)
try문 안의 문장을 수행할 때 예외 발생하면 catch문 수행
어떤 예외가 발생하든 반드시 수행되어야하는 구문은 finally문
try {
<수행할 문장 1>;
<수행할 문장 2>;
} catch(예외 1) {
<수행할 문장 A>;
<수행할 문장 B>;
} catch(예외 2) {
<수행할 문장 a>;
<수행할 문장 b>;
} finally {
<수행할 문장 I>;
<수행할 문장 II>;
}
RuntimeException & Exception
- RuntimeException : 실행 시 발생하는 예외 (= Unchecked Exception)
- Exception : 컴파일 시 발생하는 예외 (= Checked Exception)
예외 던지기 - throw, throws
- throw: 메서드 내에서 예외 강제로 발생시키는 데 사용
- throws: 메서드 선언부에 사용되어, 해당 메서드가 처리하지 않은 예외를 호출하는 쪽에서 처리하도록 전달
import java.io.*;
class FoolException extends Exception {
}
public class Day23 {
public void sayNick(String nick) throws FoolException{
if("바보".equals(nick)) {
throw new FoolException();
}
System.out.println("당신의 별명은 "+nick+"입니다.");
}
public void shouldBeRun() {
System.out.println("Ok, Thanks!");
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("나없는파일"));
br.readLine();
br.close(); // 존재하지 않는 파일 오류 : FileNotFoundException
int c = 4/0; // 산술에 문제 발생 오류 : ArithmeticException
int[] a = {1, 2, 3};
System.out.println(a[3]); // 배열의 범위 밖을 가리킬 때 오류 : ArrayIndexOutOfBoundsException
// 예외처리 : try ~ catch 구조
int d1;
try {
d1 = 4 /0;
} catch (ArithmeticException e) {
d1 = -1; // 예외가 발생하므로 이 문장이 수행됨
}
System.out.println(d1);
// finally : 어떤 에러가 발생해도 반드시 실행되어야하는 경우 처리
Day23 day23 = new Day23();
int d2;
try {
d2 = 4 /0;
} catch (ArithmeticException e) {
d2 = -1; // 예외가 발생하므로 이 문장이 수행됨
} finally {
day23.shouldBeRun();
}
/*
예외 활용하기
RuntimeException : 실행 시 발생하는 예외 = Unchecked Exception
Exception : 컴파일 시 발생하는 예외 = Checked Exception
*/
try {
day23.sayNick("바보"); // 바보 입력 시 return으로 메서드 종료되어 출력 X
day23.sayNick("야호"); // 바보 외의 입력값이므로 출력 O
} catch (FoolException e) {
System.err.println("FoolException이 발생했씁니다.");
}
}
}