예외처리
오류 : 시스템 상에서 프로그램에 심각한 문제가 발생해 실행 중인 프로세스가 종료되는 것
(개발자가 미리 예측하거나 코드로 처리하는 것이 불가능한 경우)예외 : 개발자가 미리 예측하고 처리할 수 있는 미약한 오류

(Error는 번외니까 신경 안 써도 된다.)
Throwable을 상속 받는다.Exception 클래스이다.예외처리로 if 조건문에 대해 생각할 수도 있지만 if-else는 보통 코드의 흐름을 위해 쓴다고 생각하고 예외처리는 아래 2가지를 사용하자.
- throws를 통한 위임
- try-catch를 통한 처리
Exception이 발생하는 메소드(or 생성자)를 호출한 사우이 메소드에게 처리를 위임하는 방식

예제)
ExceptionTest
package com.ohgiraffers.section01.exception;
public class ExceptionTest {
public void checkEnoughMoney (int price, int money) throws Exception {
System.out.println("가지고 계신 돈은 " + money + "원입니다.");
if (money >= price) {
System.out.println(price + "원 상품을 구입하기 위한 금액이 충분합니다!");
return;
}
// System.out.println("호주머니 상황이 ...");
throw new Exception("호주머니 상황 이슈 ...");
}
}
발생한 Exception을 직접 처리하는 방식이다.

위 예제와 이어진 예제)
Application
public class Application {
public static void main(String[] args) throws Exception {
ExceptionTest exceptionTest = new ExceptionTest();
try {
/* 개발자가 처리할 예외가 발생할 수 있는 적당한 범위를 try 블럭으로 감싼다. */
exceptionTest.checkEnoughMoney(10000, 50000);
exceptionTest.checkEnoughMoney(50000, 10000);
} catch (Exception e) {
/* 개발자가 원하는 방식대로 try 블럭에서 발생한 예외 타입 객체를 활용해서 처리할 수 있다. */
// try 블럭에서 예외가 발생하지 않으면 실행되지 않는 블럭이다.
System.out.println("뭔가 예외 발생.");
System.out.println("그 예외는 " + e.getMessage() + "!!");
e.printStackTrace();
System.exit(0); // 원하는 시점에 종료 가능
}
}
}
try 블럭
예외(Exception)가 발생할 가능성이 있는 코드를 포함하여 작성하는 블럭
catch블럭
try 블럭에서 예외 발생 시 해당 예외 타입(Exception 클래스 타입)에 대한 처리를 기술하는 블럭이다.
여러 개의 catch블럭을 이어서 사용할 수 있으며 상위 타입의 예외를 처리하는 catch 블럭이 아래 쪽에 위치해야 한다.
finally 블럭
예외 발생 여부와 상관 없이 꼭 실행되어 처리해야 할 코드가 있으면 작성하는 블럭이다. 주로 java.io나 java.sql 패키지의 메소드 처리 시 자원 반납을 위해 사용한다.
finally 블럭을 만든 이유 : try 당시에 어떤 리소스를 쓰는데, 그 리소스가 예외가 발생했음에도 계속 동작하는 경우를 처리하기 위해서 만들었다.
ArithmeticException : 0으로 나누는 경우에 발생한다.int dividend = 3;
System.out.println(dividend / 0);

ArrayIndexOutOfBoundsException : 배열의 index 범위를 넘어서 참조하는 경우 발생int[] intArr = new int[0];
System.out.println(intArr[1]);

NullPointerException : 인스턴스가 참조되지 않은 상태(Null) 로 인스턴스에 접근하면 발생int[] intArr = null;
System.out.println(intArr[0]);

4.ClassCastException : 형변환(Cast연산자 사용) 시 자료형에 문제가 있을 때 발생
Object obj = new String("hello");
int num = (Integer)obj;

NegativeArraySizeException : 배열 크기를 음수로 지정한 경우 발생int[] intArr = new int[-1];


Child1, Child2 둘다 Parent와 상속관계에 있으며 오버라이딩하는 메소드는 부모 클래스의 원본 메소드보다 더 상위 타입의 예외를 발생시키면 안 된다.