Java: return в finally блоке
Сегодня прочитал в книжке Хорстмана и Корнелла о порядке выполнения операций при перехвате исключений. И это побудило меня, оставить эту заметку..
Рассмотрим такой пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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; } } } |
Результат:
1 2 3 |
0 |
А что ожидали Вы?
Ситуация интересна тем, что finally блок выполняется, после оператора return в любом случае. Именно поэтому вместо 1, мы получили 0. Т.е. вначале отработал "первый" return, а после этого его "перезаписал" второй return который находится в секции finally. На мой взгляд, такая ошибка, может заставить понервничать, при её поиске.
Author: | Tags: /
| Rating:
Leave a Reply