Я попробовал приведенный выше пример с небольшой модификацией -
public static void main(final String[] args) {
System.out.println(test());
}
public static int test() {
int i = 0;
try {
i = 2;
return i;
} finally {
i = 12;
System.out.println("finally trumps return.");
}
}
Вышеприведенный код выводит:
наконец козыри возвращаются.
2
Это потому, что когда return i;
выполняется i
имеет значение 2. После этого выполняется блок finally
, где 12 назначается i
, а затем выполняется System.out
out.
После выполнения блока finally
блок try
возвращает 2, а не 12, поскольку этот оператор возврата больше не выполняется.
Если вы будете отлаживать этот код в Eclipse, у вас будет ощущение, что после выполнения System.out
из finally
блока оператор return
из блока try
выполняется снова. Но это не так. Он просто возвращает значение 2.