자바의 예외 처리

다중 try-catch 블록과 finally 블록

Java
public class ExceptionHandlerTest {
    public static void main(String args[]) {
        try {
            int n1 = Integer.parseInt(args[0]);
            int n2 = Integer.parseInt(args[1]);
            System.out.println(n1/n2);
        } catch (ArithmeticException e) {
            System.out.println("정수를 0으로 나눌 수 없음");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("명령형 매개변수 2개가 필요함. 1개만 입력됨");
        } finally {
            System.out.println("무조건 수행되는 로직!");
        }
    }
}

throws 예약어를 이용한 예외 처리

Java
public class ThrowsTest {
    public static void main(String args[]) {
        int[] scoreList = {10, 20, 30, 40};
        try {
            double avgScore = getAvgScore(scoreList);
            System.out.prinln("평균점수 : " + avgScore);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.prinln("평균점수 계산 에러 발생");
        }
    }

    private static double getAvgScore(int[] scoreList) throws ArrayIndexOutOfBoundsException {
        int sum = 0;
        for (int i = 0; i <= scoreList.length; i++) {
            sum = sum + scoreList[i];
        }
        return (double)sum/scoreList.lenght;
    }
}

사용자 정의 예외 처리

Java
class BadBankingException extends Exception {
    public BadBankingException(String s) {
        super(s);
    }
}

class Account {
    String name;
    int currentMoney;

    public Account(String name, int currentMoney) {
        this.name = name;
        this.currentMoney = currentMoney;
    }

    public void withdraw(int money) throws BadBankingException {
        if (currentMoney < money) {
            throw new BadBankingException("인출 잔액 부족");
        }
        currentMoney = currentMoney - money;
    }
}

public class CustomerExceptionTest {
    public static void main(String[] args) {
        try {
            Accout kim = new Account("김뫄뫄", 100);
            kim.withdraw(150);
        } catch (BadBankingException e) {
            System.out.println(e.getMessage());
        }
    }
}