X

Java: return в finally блоке

Сегодня прочитал в книжке Хорстмана и Корнелла о порядке выполнения операций при перехвате исключений. И это побудило меня, оставить эту заметку..

Рассмотрим такой пример:

public class Main {

 public static void main(String[] args) {
  System.out.println( test(2) );
 }

 @SuppressWarnings("finally")
 public static int test(int n)
 {
  try {
   return n/n;
  }
  catch (Exception e) {
   e.printStackTrace();
  }
  finally {
   return 0;
  }
 }

}

Результат:

0

А что ожидали Вы?

Ситуация интересна тем, что finally блок выполняется, после оператора return в любом случае. Именно поэтому вместо 1, мы получили 0. Т.е. вначале отработал "первый" return, а после этого его "перезаписал" второй return который находится в секции finally. На мой взгляд, такая ошибка, может заставить понервничать, при её поиске.

Категории: Java Java labs