문법.
throw new 예외객체("입력하고싶은 메시지");
//메서드 내부에서 선언이 가능하다.
문제(오류)를 실제로 던지는 행위
오류를 직접 발생시킨다고 보자.
- 자바에서 제공한 예외 클래스가 아닌 사용자 정의 예외 클래스를 통해 throw를 이용 할 수 있다. 그건 밑에서 보자.문법.
public 리턴타입 메서드명(매개변수) throws 예외클래스1, 예외클래스2 {
// 메서드 본문
}
//하나 이상의 예외 클래스를 선언할 수 있다.
//메서드 옆에 선언한다.
문제(오류)가 발생 할 수 있다고 선언하는 것.
해당 메서드에 오류가 발생 할 수 있다고 선언한다.
예제를 통해 좀 더 알아보자.
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
readFile();
} catch (IOException e) {
//IOException 이 뭐임? -> 지금은 Exception 의 하위 클래스 정도로만 알아두자.
System.out.println("파일 읽기 중 예외 발생: " + e.getMessage());
}
}
public static void readFile() throws IOException {
//readFile() static 메서드를 작성하였다.
//redaFile() 메서드 내부에서 오류가 발생할 수 있다.
//오류가 발생한다면 오류를 IOException 클래스로 throws 할 것이다.
throw new IOException("파일을 찾을 수 없습니다.");
// throw new IOException을 통해 오류를 직접 발생시켰다.
// 오류가 발생하면 "파일을 찾을 수 없습니다"라고 출력이 될 것이다.
}
}
예외 객체는 반드시 예외 클래스의 인스턴스여야 한다.
자바에서 예외는 Throwable 이라는 클래스와 그 하위 클래스에서 파생 된 객체로만 처리가 가능하다. 반드시 "Throwable"을 상속받은 클래스여야 한다. 이를 벗어나면 컴파일 에러가 발생한다.
Throwable 클래스는 자바에서 예외와 에러를 나타내는 최상위 클래스이다.
throw는 Throwable 클래스의 하위 클래스의 객체만 던질 수 있다.
java.lang.Object
↳ java.lang.Throwable
↳ java.lang.Exception
↳ 사용자 정의 예외 (Custom Exceptions)
↳ java.lang.Error
대충 이런 구조라고 생각하자.
throw new 예외객체 (""); 에서 예외객체 부분에서 Throwable의 하위 클래스가 아닌 다른 객체 (String, int)를 작성하면 컴파일 오류가 생긴다.
(Exception이나 그 하위 클래스를 extends한 사용자 정의 객체는 예외이다.)
class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
Exception 클래스를 상속하는 MyCustomException 이라는 클래스를 직접 만들었다.
해당 메서드는 외부에서 message를 입력 받고 받은 message 값을 Exception으로 내보내준다.
public class Main {
public static void main(String[] args) {
try {
validateNumber(-1);
} catch (MyCustomException e) {
System.out.println("예외 처리: " + e.getMessage());
//MyCustomException 내부에는 getMessage()라는 메서드가 없다.
//부모의 클래스에서 getMessage()를 찾아본다.
//부모의 클래스에서 getMessage()를 찾았다.
//MuCustomException 에서 받은 message를 super(message)로 올렸으니 올린 값이 출력 된다.
}
}
public static void validateNumber(int number) throws MyCustomException {
if (number < 0) {
throw new MyCustomException("양수를 입력해야 합니다: " + number);
//사용자 지정 예외 클래스를 불러와서 예외를 일으켰다.
}
}
}
결과값.
예외 처리: 양수를 입력해야 합니다: -1
정리.