예기치 않게 발생하는 에러에 대응할 수 있는 코드 작성 과정
에러의 원인은 수없이 다양하지만, 자바에서는 발생 시점에 따라

try {
// 예외가 발생할 가능성이 있는 코드를 삽입
}
catch (예외타입의 참조변수 e) { // 예외타입의 참조변수를 선언해야함
// 해당 예외가 매개변수로 들어왔을 경우 수행해야할 로직이 작성된 블럭
}
catch (ExceptionType1 e1) {
// ExceptionType1 유형의 예외 발생 시 실행할 코드
}
catch (ExceptionType2 e2) {
// ExceptionType2 유형의 예외 발생 시 실행할 코드
}
finally {
// finally 블록은 옵셔널
// 예외 발생 여부와 상관없이 항상 실행
}
예외가 발생할 때 생성되는 예외 객체로부터 해당 에러에 대한 정보를 얻는 방법
.getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻음, 오류에 대한 간단한 내용 출력
.toString() : 좀 더 자세한 예외 정보 제공
.printStackTrace() : 예외 발생 당시의 호출 스택(Call stack)에 있던 메소드의 정보와 예외 결과를 프로그램 종료 후 화면에 출력
💻 예시
try {printName(null)} // 예외 발생
// printName : 임의의 소문자를 대문자로 출력하는 메서드
catch (nullpointerException e) {
System.out.println(e.getMessage());
System.out.println(e.toString());
e.printStackTrace();
}
finally {System.out.println("[프로그램 종료]");}
// 출력값
null
java.lang.NullPointerException
[프로그램 종료]
java.lang.NullPointerException
at RuntimeExceptionTest.printMyName(RuntimeExceptionTest.java:20)
at RuntimeExceptionTest.main(RuntimeExceptionTest.java:7)
예외를 호출한 곳으로 다시 예외를 떠넘기는 방법
반환타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {
...생략...
]
💻 예시
public static void main(String[] args) {
try {
doSomething(); // 최종 호출한 main 메서드에 예외 전가
} catch (Exception e) {
System.out.println("예외 처리 중: " + e.getMessage());
}
}
static void doSomething() throws Exception {
doSomethingElse(); // 호출한 이곳에 예외 전가
}
static void doSomethingElse() throws Exception {
throw new Exception("예외 발생"); // 고의 예외 발생
}
}
Exception 클래스는 모든 예외 클래스의 상위 클래스라, 그 하위 클래스 타입의 예외 클래스들이 모두 포함throw 키워드로 의도적 예외 발생 가능Exception intendedException = new Exception("고의 예외 생성");
throw intendedExeption;