ublic class Ex72_Exception {
public static void main(String[] args) {
//Ex72_Exception.java
예외, Exception
- 런타임 오류
- 개발자가 미리 예측이 가능한 것, 불가능한 것이 있음
예외 처리, Exception Handling
1. 전통적인 방식
- 제어문 사용(조건문)
2. 전용 방식
- try 문
try 문
- try
- catch
- finally
try { //조건이 없음 어떻게 분별해서 에러를 가려낼건지?
//-> 위에서부터 쭉 실행하다가 통과되면 그대로 출력
//에러가 나는 순간 프로그램 all 스톱 -> 프로그램 안멈추고 catch로 넘김
//에러에 대한 후처리는 catch절에서 해결
//에러가 나는 사실은 변함이 없는데 에러가 난 후 상황이 달라짐
=> try 구문 중 에러 발생시 프로그램 중단없이 catch로 예외처리 후 나머지 코드 계속 이어감
- 비즈니스 코드(= 업무 코드)
System.out.printf("100 / %d = %d\n", num, 100 / num);
} catch(Exception e) {
- 예외 처리 코드
System.out.println("0을 입력하면 안됩니다.");
}
System.out.println("종료");
case 1.
int num = 0; //사용자 입력
try {
System.out.println(100 / num); //100 / num인데 0으로 나눌 수 없음
} catch(Exception e) {
System.out.println("0으로 나누기");
}
case 2.
int[] nums = {10, 20, 30};
try {
System.out.println(nums[5]); //배열은 3갠데 5번을 호출하는 경우 에러
} catch(Exception e) {
System.out.println("배열 첨자 오류");
}
다중 try-catch절
try { //catch 중 exception은 맨 뒤에 둬야 함. 뒤로 넘어갈 기회가 없기때문에 안됨
int num = 10;
System.out.println(100 / num); // 여기서 에러 난 순간 다 스킵하고 catch로 점프
//여기서 에러나면 throw new ArithmeticException() 생성
int[] nums = {10, 20, 30}; //여기서 에러나면 throw new ArrayIndexOutOfBoundsException
System.out.println(nums[0]);
Calendar now = null; //여기서 에러나면 throw new NullPointerException
System.out.println(now.get(Calendar.HOUR_OF_DAY));
} catch(ArithmeticException e) { //0으로 틀렸을 때
System.out.println("0으로 나누기");
} catch (ArrayIndexOutOfBoundsException e) { //배열로 틀렸을때
System.out.println("방번호 틀림");
} catch (NullPointerException e) { //null로 틀렸을때
System.out.println("널참조");
} catch (Exception e) {
System.out.println("예외 처리");
}
//틀렸을때 제자리 잘 찾아감
'[JAVA] 정리 > 클래스(Class)_타입(Type)' 카테고리의 다른 글
| 클래스_익명 객체 Anonymous Object (0) | 2023.02.28 |
|---|---|
| 클래스_예외 처리2 (0) | 2023.02.23 |
| 클래스_오브젝트(Object) (0) | 2023.02.23 |
| 향상된 for문 for(자료형 변수명 : 배열명) (0) | 2023.02.23 |
| 제네릭 클래스(Generic) (0) | 2023.02.23 |