자바의 예외 처리
다중 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());
}
}
}