

Exception과 그 자손클래스
Exception으로부터 바로 상속
예외처리를 하지 않으면 컴파일 자체가 불가능함.
RuntimeException과 그 자손클래스
RuntimeException으로부터 바로 상속
예외처리를 하지 않아도 컴파일은 가능, 실행 중 예외가 발생하면 프로그램 종료
if문과 달리, try 블럭이나 catch 블럭 내에 포함된 문장이 하나뿐이어도 중괄호{}를 생략할 수 없다.
try {
// 예외가 발생할 가능성이 있는 문장들을 넣는다.
// 일반예외/실행예외 발생 가능 코드
} catch (예외클래스명 참조변수명) {
// 예외클래스명 해당 예외가 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception1 e2) {
// Exception2가 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception1 eN) {
// ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} finally {
// 예외 발생여부에 상관없이 무조건 실행블록, 생략 가능하다.
}
try {
System.out.println(3);
System.out.println(0/0); // 0으로 나눠서 고의로 ArithmeticException을 발생시킴.
System.out.println(4); // 실행되지 않는다.
} catch (Exception e) { // Exception -> ArithmeticException을 제외한 모든 예외가 처리됨. 모든 예외의 최고 조상. 모든 예외처리 가능.
System.out.println("Exception");
}
System.out.println(5);
throws를 사용하여 예외처리 미루기
메서드 선언부에 throws를 추가
예외가 발생한 메서드에서 예외 처리를 하지 않고 이 메서드를 호출한 곳에서 예외 처리를 한다는 의미
main()에서 throws를 사용하면 가상머신에서 처리됨
리턴 타입 메서드명(입력 매개변수) throws 예외 클래스명 {
// 예외 발생 코드
}
하나의 catch 블록에서 여러 개의 예외처리 가능. 예외 타입을 OR(||)로 연결
try {
// 예외 발생 가능 영역
}
catch(예외타입A || 예외타입B 참조변수명) {
//
}
출처: 자바의 정석