Мне интересно, почему компилятор java допускает выбросы в объявлении метода, когда метод никогда не вызовет исключение. Потому что "throws" - это способ обработки исключения (указание вызывающей стороне обработать его).
Так как есть два способа обработки исключений (throws и try/catch). В try/catch он не позволяет перехватывать исключение, которое не было сгенерировано в блоке try, но допускает выбросы в методе, который не может вызвать исключение.
private static void methodA() {
try {
// Do something
// No IO operation here
} catch (IOException ex) { //This line does not compile because
//exception is never thrown from try
// Handle
}
}
private static void methodB() throws IOException { //Why does this //compile when excetion is never thrown in function body
//Do Something
//No IO operation
}