예외가 1개일 경우
try {
// 일반 코드 & 예외 발생 가능성이 있는 코드
} catch (예외클래스명 변수명) {
// 예외가 발생할 경우 처리할 코드
}
예외가 복수개일 경우
try {
예외발생1코드
예외발생2코드
예외발생3코드
예외발생4코드
} catch (예외발생1클래스 변수명){
} catch (예외발생2클래스 변수명){
} catch (예외발생3클래스 | 예외발생4클래스 변수명){
} catch (Exception e){
위의 모든 예외가 일치하지 않을 경우 나머지 예외를 모두 처리하는 코드
}
finally 사용할 경우
-> 예외가 발생하더라도 실행된다. try 안에서 return문을 넣어도 실행됨
try {
// 일반 코드 & 예외 발생 가능성이 있는 코드
} catch (예외클래스명 변수명) {
// 예외가 발생할 경우 처리할 코드
} finally {
// 예외가 발생하든 안하든 실행될 코드
}
1) Complie Checked Exception
컴파일 시점에서 예외 발생 가능성 판별 가능 (예외 처리 강제성 있음)
예시) IOException, SQLException, ClassNotFoundException
--> try - catch 필수
2) Compile Unchecked Exception
컴파일 시점에서 예외 발생 가능성 판별 불가능하며 실행 시점에서 예외 발생 여부 판별
예시) RuntimeException, ArithmeticException, ArrayIndexOutOfBoundsException, NullPointerException, ClassCastException
-예외 발생 시 예외가 발생한 메서드에서 직접 처리하는 것이 아니라 메서드 호출한 곳에서 예외처리할 수 있도록 위임하는 것
-각각의 예외클래스를 따로 기술하거나 상위 타입 예외클래스 하나만으로 대체 가능
예1) throws RuntimeException 기술 시
RuntimeException 계열 예외는 외부로 던지고, 나머지 예외는 직접 예외 처리
예2) throws Exception 기술 시 모든 예외를 외부로 던짐
미리 정해진 예외가 아닌 개발자가 지정한 상황에서 예외 발생시키는 것
예시
public static void main(String[] args) {
int age = 10000; // 1 ~ 150살까지만 입력 가능하다고 가정
try {
na2(age);
} catch (Exception e){
e.printStackTrace();
}
System.out.println("프로그램 종료됩니다");
}
public static void na2(int age) throws Exception {
if (age < 1 || age > 151) {
throw new Exception("나이 입력 오류"); // 객체 생성하여 던진다
}
}
뿐만 아니라 예외 발생 클래스 또한 지정이 가능하다
예시
*예외 클래스 정의
class InvaildAgeInputException extends Exception {
public InvaildAgeInputException(String str) {
super(str);
}
}
*불러오기
public static void main(String[] args) {
int age = 10000; // 1 ~ 150살까지만 입력 가능하다고 가정
try {
na2(age);
} catch (Exception e){
e.printStackTrace();
}
System.out.println("프로그램 종료됩니다");
}
public static void na2(int age) throws Exception {
if (age < 1 || age > 151) {
throw new InvaildAgeInputException("나이 입력 오류");
}
}