[...] return
оператор без выражения пытается передать управление вызывающему методу или конструктору, который его содержит.
[...] оператор return
с выражением пытается передать управление вызывающему методу, который его содержит; значение Expression становится значением вызова метода.
[...] Таким образом, видно, что оператор return всегда завершается внезапно.
Резкое завершение означает , что означает, что любые последующие операторы не будут выполняться, и в некоторых случаях это может привести к ошибке во время компиляции ( JLS 14.21 Недоступные утверждения )
void unreachable() {
return;
System.out.println("Bye!"); // DOESN'T COMPILE! Unreachable code!
}
Продолжаем ...
В предыдущих описаниях говорится " пытается передать управление", а не просто "передает управление", потому что, если есть какие-либо операторы try
[...], то любые finally
предложения [... ] будет выполнено [...] Неожиданное завершение предложения finally
может нарушить передачу управления, инициированную оператором return
.
Это означает, что следующая функция будет return -1
вместо 0
.
int tryReturn() {
try {
return 0;
} finally {
return -1;
}
}
При отсутствии try-finally
управление будет немедленно передано, и значение Expression , если оно есть, будет передано вызывающей стороне.