반응형
정의
프로그램 실행 중 나타나는 오류
개발자가 예상하지 못한 오류
예외 처리
오류가 나서 실패한 것을 성공으로 바꾸는 것이 아닌,
오류가 나서 실패했다고 알려주는 것
기본 문법
try {
// 예외가 발생할 것 같은 의심스러운 코드
} catch(예외클래스 e) {
// 예외 터지면 실행되는 코드
}
ArrayIndexOutOfBoundsException
package com.example.shoppingmall.exercise;
public class ArrayIndexOutOfBoundEx {
public static void main(String[] args) {
// 예외 발생 상황
String[] str = { "A", "b"};
try {
System.out.println(str[3]);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("배열 인덱스 모자라..");
System.out.println(e.getMessage());
System.out.println(e.toString());
}
}
}
다중 처리 예시
package com.example.shoppingmall.exercise;
import java.util.InputMismatchException;
import java.util.Scanner;
public class MultiCatchEx {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] cards = {4, 5, 6, 7, 8};
try {
System.out.println("몇 번째 카드를 뽑으실래요?");
int cardIdx = scanner.nextInt();
System.out.println("뽑은 카드 번호는 : " + cardIdx );
System.out.println("뽑은 카드에 적힌 숫자는 : " + cards[cardIdx]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("없는 번호입니다.");
} catch (InputMismatchException e) {
System.out.println("숫자만 입력하세요.");
} catch (Exception e) { // 이렇게 뭉뜽그려 잡는 예외는 좋지 않다
}
}
}
실행 순서
- try 구문 순서 실행
- 예외 만나면 ⇒ JVM이 예외가 터진 지점, 이유 ⇒ 예외 객체 ⇒ catch 호출하면서 매개변수로 넣어준다.
예외 클래스 종류
- Object 클래스
- Throwable 클래스
- Error 클래스 : OutOfMemoryError, VMError
- Exception 클래스
- checked : IOException, SQLEx, ClassNotFoundEx
- unchecked : RuntimeEx - NPE, IndexOutOfBoundEx
메소드에서의 예외 처리 (throws)
예외 처리는 메소드를 호출한 클래스 책임?vs 예외를 발생시키는 메소드가 책임? = 이 메소드 안에서 try catch로 잡는 거
-> throws : 예외가 발생하는 연산이 포함된 메소드를 호출한 위치로 예외 처리를 전가하는 것 (날 호출한 너가 책임져!)
throws 발생하는 예외 객체
- 이 메소드를 호출한 위치로 이객체를 던진다.
- 예외 객체를 대신 처리해줘야 한다.
package com.example.shoppingmall.exercise;
public class ArithmeticEx {
public static void main(String[] args) {
int result = divide(10, 0);
}
public static int divide(int x, int y) throws ArithmeticException {
int result = 0;
try {
result = x / y;
} catch (ArithmeticException e) {
System.out.println("0으로 나누기 실패");
return 0;
}
return result;
}
}
반응형
'프레임워크 > Spring Boot' 카테고리의 다른 글
[Spring Boot] HttpMediaTypeNotAcceptableException 에러 해결 (0) | 2024.05.14 |
---|---|
[Spring Boot] @JsonNaming, @JsonProperty (0) | 2024.05.13 |
[JAVA] Iterator & Foreach (0) | 2024.05.10 |
[JAVA] 배열 vs 리스트 (0) | 2024.05.10 |
[JAVA] 로그 & 로그 레벨 (Log Level) (0) | 2024.05.10 |