본문 바로가기
프로젝트

수강생의 과목별 회차 점수 수정 pt3. (예외 잡기)

by wjdtmdgjs 2024. 8. 6.

예외를 handling 하기위해 사용되는 메서드

try-catch,finally

 

  • **try** - **catch**는 각각 중괄호{}를 통해 실행할 코드들을 담습니다.
  • try 단어의 **“시도한다”**라는 뜻에 맞게 중괄호{} 안에는 예외가 발생할 수 있지만 실행을 시도할 코드를 담습니다.
  • catch 단어의 **“잡는다”**라는 의미에 맞게 중괄호{} 안에는 try 안에 있는 코드를 실행하다가 예외가 났을 때 실행할 코드를 담습니다.
    • catch 는 소괄호()를 통해 어떤 예외 클래스를 받아서 처리할지 정의해 주어야 합니다.
    • catch로 모든 예외를 다 받고 싶으면 Exception 을 넣어주면 됩니다.
    • catch로 일부 예외만 받아서 처리하고 싶으면 해당 예외 클래스명을 넣어주면 됩니다.
    • 1개의 try 문에 catch 문은 여러 개 사용할 수 있습니다. ex) 1try : 4catch
  • 기존 **try - catch**의 맨 마지막에 **finally**를 붙여서 마지막에 반드시 실행할 코드를 넣을 수 있습니다.

 

public class StudyException {
    public static void main(String[] args) {
        OurClass ourClass = new OurClass();

        try {
            // 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
            // "시도" 해보는 코드가 들어가는 블럭입니다.
            ourClass.thisMethodIsDangerous();
        } catch (OurBadException e) {
            // 2. 예외가 발생하면, "잡아서" handling 합니다.
            // 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
// 예외가 발생한 줄에서 바로 코드 실행을 멈추고
// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
            System.out.println(e.getMessage());
        } finally {
            // 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
            // 무조건 실행되는 코드가 들어가는 블럭입니다.
            System.out.println("우리는 방금 예외를 handling 했습니다!");
        }

    }
}

 

내가 사용한 try-catch

while (true) {
    try {
        System.out.println("회차입력");
        Scanner sc = new Scanner(System.in);
        round = sc.nextInt();
        break;
    } catch (InputMismatchException e) {
        System.out.println("정수를 입력해주세요");
    }
}

 

finally는 사용하지 않고 기본적으로 제공되는 exception메서드를 이용해서 int를 입력받는 곳에 int가 아는 값이 들어오면 예외처리를 하는 것으로 썼다.