오류처리 : try-catch

·2024년 4월 8일
0

JAVA

목록 보기
7/7

🤍 1. 기본 문법

예외가 1개일 경우

try {
// 일반 코드 & 예외 발생 가능성이 있는 코드
} catch (예외클래스명 변수명) {
// 예외가 발생할 경우 처리할 코드
}

예외가 복수개일 경우

try {
예외발생1코드
예외발생2코드
예외발생3코드
예외발생4코드
} catch (예외발생1클래스 변수명){
} catch (예외발생2클래스 변수명){
} catch (예외발생3클래스 | 예외발생4클래스 변수명){
} catch (Exception e){
위의 모든 예외가 일치하지 않을 경우 나머지 예외를 모두 처리하는 코드
}

finally 사용할 경우
-> 예외가 발생하더라도 실행된다. try 안에서 return문을 넣어도 실행됨

try {
// 일반 코드 & 예외 발생 가능성이 있는 코드
} catch (예외클래스명 변수명) {
// 예외가 발생할 경우 처리할 코드
} finally {
// 예외가 발생하든 안하든 실행될 코드
}

🤍 2. 예외 종류

1) Complie Checked Exception
컴파일 시점에서 예외 발생 가능성 판별 가능 (예외 처리 강제성 있음)

예시) IOException, SQLException, ClassNotFoundException
--> try - catch 필수

2) Compile Unchecked Exception
컴파일 시점에서 예외 발생 가능성 판별 불가능하며 실행 시점에서 예외 발생 여부 판별

예시) RuntimeException, ArithmeticException, ArrayIndexOutOfBoundsException, NullPointerException, ClassCastException

🤍 3. 예외 처리에 대한 위임 (= throws)

-예외 발생 시 예외가 발생한 메서드에서 직접 처리하는 것이 아니라 메서드 호출한 곳에서 예외처리할 수 있도록 위임하는 것
-각각의 예외클래스를 따로 기술하거나 상위 타입 예외클래스 하나만으로 대체 가능

예1) throws RuntimeException 기술 시
RuntimeException 계열 예외는 외부로 던지고, 나머지 예외는 직접 예외 처리
예2) throws Exception 기술 시 모든 예외를 외부로 던짐

🤍 4. 사용자 정의 예외 발생

미리 정해진 예외가 아닌 개발자가 지정한 상황에서 예외 발생시키는 것

예시

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("나이 입력 오류");
	}
}
profile
~*

0개의 댓글