● 예외 처리
- 에러 : 심각한 오류
- 예외 : 덜 심각한 오류
● 예외 처리 문법
try{
예외가 발생할 수 있는 문장
} catch(예외이름 객체명) {
// 예외 발생 시 해당 예외 필드가 메모리에 할당된다.
// 할당된 주소를 선언한 객체로 받지 못한다면 프로그램이 강제 종료된다.
// 이를 막기 위해 동일한 예외타입의 객체를 선언하여 catch문 안의 문장으로 대체되도록 구현한다.
예외 발생 시 실행할 문장
} catch(예외이름 객체명) {
예외 발생 시 실행할 문장
}
...
} finally {
예외 발생 여부에 상관없이 무조건 실행할 문장
※ 외부 장치와 연결했을 경우 다시 닫을 때 주로 사용한다.
}
(ex)
catch(ArrayIndexOutOfBoundsException e) {
// e 객체를 통해 다양한 예외 상황 및 상태를 확인할 수 있다.
e.printStackTrace(); // 오류가 발생한 소스코드의 라인번호를 출력해준다.
} catch(Exception e) {
// 모든 예외의 부모 클래스가 Exception이고,
// 어떤 예외가 발생하더라도 Exceeption(부모) 타입이기 때문에
// 모든 예외를 다 담을 수 있다.
e.printStackTrace();
}
● 예외 처리를 사용하는 이유
- 제어문으로는 처리할 수 없는 경우
- 프로그램이 강제로 종료되는 것을 막기 위함(튕김 방지)
실습(예외 처리(1))
1. 음수 인덱스번호
- 예외처리 : getMessage(), toString(), println()
public class ExceptionTest {
public static void main(String[] args) {
int[] arData = new int[4];
try {
arData[-1] = 10;
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println(e);
System.out.println("배열의 인덱스 번호를 확인해주세요.");
} catch(Exception e) { // 항상 Exception을 마지막에 써준다.
System.out.println(e.getMessage());
System.out.println(e.toString());
}
System.out.println("반드시 실행해야 하는 문장");
}
}
![](https://blog.kakaocdn.net/dn/ccX8FH/btrvJyzJjQZ/Wbj5KoqAzDARK6KyS7MIqk/img.png)
2. 반드시 실행해야 하는 문장이 출력되도록 try-catch를 사용한다.
- 예외처리 : println()
public class ExceptionTest {
public static void main(String[] args) {
try {
System.out.println(10 / 0);
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
} catch (Exception e) {
System.out.println("알 수 없는 오류");
}
System.out.println("반드시 실행해야 하는 문장");
}
}
실습(예외 처리(2))
※ 문제
// 5개의 정수만 입력받기
// 무한 입력 상태로 구현
// q를 입력하면 나기기
// 5개의 정수는 배열에 담기
// if문은 딱 한 번만 사용하기
- 코드
import java.util.Scanner;
public class ExceptionTask {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arData = new int[5];
String msg = "번째 정수 입력[q : 나가기]";
int index = 0;
String temp = null;
while(true) {
System.out.println(++index + msg);
temp = sc.next();
if(temp.toLowerCase().equals("q")) { break; }
try {
arData[index - 1] = Integer.parseInt(temp);
} catch (NumberFormatException e) {
System.out.println("제대로 입력하세요.");
index--;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("5개만 입력하세요.");
for (int i = 0; i < arData.length; i++) {
System.out.print(arData[i] + " ");
}
break;
} catch(Exception e) {
System.out.println("잘못 입력했습니다.");
System.out.println(e);
}
}
}
}
![](https://blog.kakaocdn.net/dn/VaOSp/btrvKKmDVYG/lXvh3qje7ZZxOq4xd3oIZK/img.png)
![](https://blog.kakaocdn.net/dn/b3sCk0/btrvLhqYxF0/lrkKfhLfxBB4CQZtazdfHk/img.png)
'웹 개발 > Java' 카테고리의 다른 글
[Web_JAVA] 28 (0) | 2022.03.14 |
---|---|
[Web_JAVA] 27 (0) | 2022.03.13 |
[Web_JAVA] 25 (0) | 2022.03.11 |
[Web_JAVA] 24 (0) | 2022.03.10 |
[Web_JAVA] 23 (0) | 2022.03.09 |