Я знаю, что можно создать сегмент try-catch без блока finally. Итак, взламывая этот код, я не могу понять, какая логика Java (например, правило, теория) заставляет меня включать блок finally в этот сегмент кода - и почему блок finally должен включать в себя оператор возврата. Другими словами, если я полностью удаляю блок finally, я получаю сообщение об ошибке, и если я заменяю оператор return в блоке finally чем-либо еще (например, System.out.printl(''foo")), я все равно получаю сообщение об ошибке. настаивая на включении оператора return. Опять же, код, написанный здесь, компилируется и работает нормально. Я просто пытаюсь немного понять теорию, лежащую в основе конструкции try-catch-finally (p.s. я понимаю, что все дело в " обработка исключений"... но мой вопрос больше касается потока кода и оператора return).
class foo {
int getInt() {
try {
String[] students = {"student1", "student2"};
System.out.println(students[4]);
}
catch (Exception e) {
return 10;
}
finally {
return 20;
}
}
public static void main(String args[]) {
foo classSize = new foo();
System.out.println(classSize.getInt());
}
}
return 20
может находиться за пределами try/catch, в конце метода или в конце блокаtry
. Однако нет ничего плохого в том, как это сделано выше. - person Hot Licks   schedule 07.07.2014finally
исправляет компиляцию, но логически это ошибка. - person Sergey Kalinichenko   schedule 07.07.2014return
.) - person Hot Licks   schedule 07.07.201420
в блоке finally, который будет выполняться после блока catch,10
? [Подсказка: да]return
в блоках finally разрешено, но плохая идея. - person Andrew Lazarus   schedule 07.07.2014return <some_value>;
вдоль КАЖДОГО пути к выходу из метода без исключения. Если вы удалитеreturn
в предложенииfinally
и не замените его другим в другом месте, то метод может выйти без указания возвращаемого значения. - person Hot Licks   schedule 07.07.2014