[Exception (예외)]
-예외 : 프로그램이 진행하는 과정에서 만나게 되는 오류(가벼운 정도의 에러)
-예외 처리 목적
: 프로그램이 진행할 때 일으킬 수 있는 상황등을 미리 정해놓고,
해당하는 예외가 발생했을 경우 그에 맞는 적절한
조치를 취해서 프로그램이 정상적으로 작동하도록 하기 위해서이다.

상속구조도를 항상 보는 습관을 가져야한다.
기능클래스 : Math 등등...
정보클래스 :Exception
예외처리 방법
1. Handle 하는 방법 : try~catch 구문 이용.
2. Declare 하는 방법 : throws 절을 선언하여 예외 전가.
try - catch : 예외 처리를 직접 구현하는 방법
try{
예외가 발생할만한 코드
}catch( 해당 Exception e){
예외 일시 처리할 루틴
}
하나의 try문과 여러 개의 catch문
try{
예외가 발생할 만한 코드
}catch(해당 Excetpion e1){
예외처리루틴1
}catch(해당 Excetpion e2){
예외처리루틴2
}catch(해당 Excetpion e2){
예외처리루틴3
}
ㄴ세부설정을 가지고 있는 자식부터 포괄적인 부모순으로 작성.
ㄴ만약 부모 Exception먼저 작성하고 자식을 작성한다면 데드코드로 뒤에 자식 코드 실행 안됨.
ㄴ예외처리를 로직의 일환으로 사용하지는 말 것.
package day19;
public class ExcepTest1 {
public static void main(String[] args) {
System.out.println("프로그램의 시작");
//예외처리를 직접 구현을 하는 방법
try {//에러가 날것 같은 부분 감싸기
String str = null;
System.out.println("str="+str.toString());
}catch(NullPointerException e) { // 이 오류가 생겨 잡았다면 e에 넣어줘.
System.out.println("사용할 객체가 존재하지 않음");
// e.printStackTrace(); //어떤 코드가 나오는지 보여줌.
//서비스를 상용할때는 삭제해야하는 테스트 코드임.
}
//NullPointerException : 객체가 없는데 객체가 가지고 있는 기능을 쓰려고 했을때.
System.out.println("프로그램의 끝");
}
}
package day19;
//다중catch문
public class ExcepTest4 {
public static void main(String[] args) {
try {
String data1 = args[0];
String data2 = args[1];
//명령줄 인수?
System.out.println("첫번째 데이터:"+data1);
System.out.println("두번째 데이터:"+data2);
int num1 = Integer.parseInt(data1);
int num2 = Integer.parseInt(data2);
System.out.println(data1+"/"+data2+"="+(num1/num2));
//레이더 (try)는 하나.
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("프로그램 구동시 사용할 데이터를 입력해주세요.");
}catch(NumberFormatException e) {
System.out.println("입력할 데이터는 숫자여야만 합니다.");
}catch(ArithmeticException e) {
System.out.println("0으로는 나눌 수 없습니다.");
}catch(Exception e) {
System.out.println("고객센터 연락바람.");
}
}
}
NullPointerException : 객체가 없는데 객체가 가지고 있는 기능을 쓰려고 할때 나오는 오류.
ArrayIndexOutOfBoundsException : 범위에 없는 위치를 작성했을 경우 나오는 오류.
ArithmeticException : 산술예외로 0으로 나누려고 할때 나오는 오류.
e.printStackTrace(); //어떤 에러코드인지 보여줌, 실제 서비스 사용할때는 주석처리해야함.
[finally문]
try catch의 원형은 try~catch~finally 이다.
try ~catch 문에서 예외가 발생하거나 또는 발생하지 않더라도 반드시 실행해야하는 문장이 있을때 사용하는 구문.
자원을 쓰는 코드는 finally가 기본으로 들어간다.
자원 : 연결 정보의 객체 (예. system.in, BufferedReader등),자원을 쓸 때는 반환을 해줘야한다.
package day19;
import java.io.*;
public class ExcepTest5 {
public static void main(String[] args) {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("몇개의 데이터를 입력하시겠습니까?");
int num = Integer.parseInt(br.readLine()) ;
int arr[] = new int[num];
for(int i=0;i<num;i++) {
System.out.print((i+1)+"번째 데이터: ");
arr[i] = Integer.parseInt(br.readLine()) ;
}
System.out.print("몇 번째 데이터를 확인하시겠습니까?");
int user = Integer.parseInt(br.readLine()) ;
System.out.println("선택한 값은:"+arr[user-1]);
}catch(IOException e) {
System.out.println("입출력 관련 예외 발생!");
}catch(NumberFormatException e) {
System.out.println("숫자만을 입력하셔야 합니다.");
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("존재하지 않는 위치입니다.");
}catch(NegativeArraySizeException e) {
System.out.println("저장공간의 크기는 항상 양수여야합니다.");
}catch(Exception e) {
System.out.println("고객센터 연락바람~");
}finally {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
try~catch~finally( try~catch) // finally를 사용하여 나올 수 있는 예외처리 한번더 해주기.
[예외 처리 미루기]
메소드 내부에서 예외를 직접 처리하지 않고 메소드를 호출한 곳으로 예외처리를 미루는 방법.
*사용자 정의 예외
throws 예외객체 // 전가(나를 호출한 녀석에게 전가함)
throw new 예외클래스(전달인자); // 발생
package day19;
import java.io.*;
class AAA{
public void aaa() {
throw new NullPointerException();
//RuntimeException 계열 예외들은 throws를 안해줘도 jvm이 알아서 throws를 해주므로 생략해도됨
}
}
class BBB{
public void bbb() { // throws : 나를 호출한 녀석에게 전가
AAA a =new AAA();
a.aaa();
}
}
public class ThrowsTest {
public static void main(String[] args) {
BBB b = new BBB();
b.bbb();
}
}
RuntimeException 계열 예외들은 throws를 안해줘도 jvm이 알아서 throws를 해주므로 생략해도된다.
'개발자 > 백엔드 웹 개발자 과정(국비)' 카테고리의 다른 글
| 2022년 12월 07일 _ 21회차 (collection, generic,vector,hashtable) (0) | 2022.12.07 |
|---|---|
| 2022년 12월 02일 _ 20회차 (String 클래스) (0) | 2022.12.02 |
| 2022년 11월 30일 _ 18회차 (실습.) (0) | 2022.11.30 |
| 2022년 11월 29일 _17회차 (final ,인터페이스) (0) | 2022.11.30 |
| 2022년 11월 28일 _ 16회차 (추상 클래스(abstract)) (0) | 2022.11.28 |