Try-catch-finally

Анализ определенного присваивания для оператора 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

}
}