다연이네

[days17] 예외처리 (Exception handling) 본문

Java

[days17] 예외처리 (Exception handling)

 다연  2020. 10. 18. 14:37
반응형

프로그램 오류 

1. 정의 

   프로그램 실행 중 어떤 원인에 의해 오작동하거나 비정상적으로 종료되는 경우가 존재하는데,

   이러한 결과를 초래하는 원인

2. [발생 시점]에 따른 구분

   ㄱ. 컴파일에러(compile-time error)

   ㄴ. 런타임 에러(runtime error)

         1) 컴퓨터 하드웨어의 오작동: 에러(Error)-코딩에 의한 수습 불가

         2) 프로그램 코드에 의해 수습될 수 있는 다소 미약한 오류: 예외(Exception)

   ㄷ. 논리적 에러(logical error) 

          실행은 되나 의도와 다르게 동작( 게임에서 총알에 맞음 -> 죽지 않음)

 

모든 클래스 최상위 부모 클래스는 Object이고.
                                                 :
                                           Throwable
                                    :                         :
                                Exception                Error  
                                    :                        :
            RuntimeException ... IOException     OutOfMemoryError
모든 예외의 부모클래스는 Exception 클래스이다.

 

 

예외처리

(1) try~catch문 사용 

     -  다중 catch문 사용

     -  멀티 catch문 사용

    catch (IndexOutOfBoundsException | ArithmeticException e)

 

*예외처리를 프로그램 실행 중간에 강제로 예외를 발생시켜 멈추는 것을 방지할 목적으로 사용하기도 한다.

int [] m = {1,2,3};
		for (int i = -10; i <= m.length; i++) {
			try {
				System.out.println(m[i]);
			} catch (ArrayIndexOutOfBoundsException e) {
				//예외 발생하면 넘어간다. (중단되는게 아니라)
			}
		}

출력값: 123

 

예외를 출력하는 함수

e.printStackTrace(); //예외메시지를 출력하는 함수  

System.out.printin(e.getStackTrace()); //에러메세지만 출력

System.out.printin(e.toString());  

System.out.printin(e.getMessage()); //입력된 예외메시지 출력

 

(2) throw 키워드로 예외 발생시키기

   throw문 : 예외를 강제로 발생시키는 문

   throws 문 : 예외 떠넘기기 (메인에서 throws IOException 하면 예외처리 안하겠다는 소리)

 

//<try~catch문으로 국어 점수 얻기>
package review;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Review03 {

	public static void main(String[] args) {
		int result = getKor();
		System.out.println(result);
		
		

	}

private static int getKor() {
		Scanner scanner = new Scanner(System.in);
		int kor = 0;
		while(true) {
			System.out.print("> input kor score ?");
			try {
				kor=scanner.nextInt();
				break;
			} catch (InputMismatchException e) {
				scanner.nextLine();
				System.out.println("> input again");
			}
		}
		return kor;
	}

}
//throw로 강제로 예외 발생시킨 후 throws로 예외처리 넘겨주기
package review;

import java.io.IOException;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Review03 {

	public static void main(String[] args) {
		
		
		try {
			int kor = getKor();
			System.out.println(kor);
		} catch (InputMismatchException|IOException e) {
			System.out.println(e.getMessage());
		}

	}
	private static int getKor() throws InputMismatchException, IOException{
		Scanner scanner = new Scanner(System.in);
		int kor = 0;
		System.out.print("> input kor score ? ");
		String data = scanner.next();
		if(data.matches("\\d{1,2}|100")) {
			kor = Integer.parseInt(data);
			return kor;
		}
		else throw new InputMismatchException("Mistake!!"); //강제로 예외 발생
	}



}
반응형
Comments