게시물 내용은 필자가 공부하기 위해 작성한 내용이기 때문에 오류 사항이 있을 수 있다.
public static void function() throws Exception {
String a = null;
System.out.println(a.length());
}
메소드 선언시 붙일 수 있는 throws 키워드는, 해당 메소드에서 Exception이 발생하였을때 그에 대한 처리를 caller 메소드로 위임한다.
(caller - 호출자, callee - 피호출자)
가령 다음과 같이 main() 메소드에서 function() 메소드를 호출할 때, function() 메소드가 throws 키워드가 없는 상태이면 컴파일 오류가 발생하지 않고 function() 메소드와 main() 메소드 차례로 런타임 Exception이 발생한다.
public class Main {
public static void function() {
String a = null;
System.out.println(a.length());
}
public static void main(String[] args) {
Main.function();
}
}
하지만 다음과 같이 function() 메소드에 throws 키워드와 원하는 Exception을 작성해주면 caller에서 Exception이 핸들링 되지 않았다며 컴파일 오류가 발생한다.
왜냐하면 Exception에 대한 처리를 Caller로 위임했기 때문이다.
public class Main {
public static void function() throws Exception {
String a = null;
System.out.println(a.length());
}
public static void main(String[] args) {
Main.function();
}
}
따라서 caller인 main() 메소드에서 Exception 처리를 해주어야 한다.
만약 callee에서 throw할 Exception이 여러개라면 콤마(,)를 기준으로 나열해주면 된다.
public class Main {
public static void function() throws NullPointerException, NumberFormatException {
// do something
}
public static void main(String[] args) {
Main.function();
}
}