Анализ определенного присваивания для оператора try-catch-finally, имеющего форму
try блок_try
catch(...) блок_catch_1
...
catch(...) блок_catch_n
finally блок_finally:
выполняется с допущением, что оператор try-finally заключает оператор try-catch:
try {
try блок_try
catch(...) блок_catch_1
...
catch(...) блок_catch_n
}
finally блок_finally
В следующем примере демонстрируется, как разные блоки оператора try (§8.10) влияют на определенное присваивание.
class A
{
static void F() {
int i, j;
try {
goto LABEL;
// neither i nor j definitely assigned
i = 1;
// i definitely assigned
}
catch {
// neither i nor j definitely assigned
i = 3;
// i definitely assigned
}
finally {
// neither i nor j definitely assigned
j = 5;
// j definitely assigned
}
// i and j definitely assigned
LABEL:;
// j definitely assigned
}
}