Checked и unchecked.
Состояние определенного присваивания переменной v в ветви потока управления, ведущей к первому оператору в списке операторов блока (либо к конечной точке блока, если список операторов пуст) соответствует состоянию определенного присваивания переменной v перед блоком, оператором checked или unchecked. 5.3.3.3 Операторы-выражения; Для оператора выражения stmt, состоящего из выражений expr: · переменная v имеет такое же состояние определенного присваивания к началу выражения expr, как и к началу оператора stmt; · Если переменная v является определенно присвоенной к концу выражения expr, она считается определенно присвоенной в конечной точке оператора stmt; в обратном случае она не является определенно присвоенной в конечной точке оператора stmt. 5.3.3.4 Операторы объявления; · Если оператор stmt является оператором объявления без инициализаторов, переменная v имеет такое же состояние определенного присваивания в конце оператора stmt, как и в начале этого оператора. · Если оператор stmt является оператором объявления с инициализаторами, состояние определенного присваивания для переменной v определяется как для списка операторов с отдельным оператором присваивания для каждого объявления с инициализатором (в порядке объявления). If Для оператора if в форме: if (выражение) then-stmt else else-stmt · переменная v имеет такое же состояние определенного присваивания на начало выражения expr, как и на начало оператора stmt; · если переменная v является определенно присвоенной на конец выполнения выражения expr, она является определенно присвоенной в ветви потока управления до операции then-stmt, а также или в else-stmt, или в конечной точке операции stmt, если условие else отсутствует; · если переменная v имеет состояние «определенно присвоенное в результате выполнения выражения с итогом true» в конце выражения expr, она считается определенно присвоенной в ветви потока управления до операции then-stmt и не является определенно присвоенной в ветви потока управления или в else-stmt, или в конечной точке операции stmt, если условие else отсутствует; · если переменная v имеет состояние «определенно присвоенная после выполнения выражения с результатом false» в конце выражения expr, она является определенно присвоенной в ветви else-stmt и не является определенно присвоенной в ветви then-stmt. Эта переменная считается определенно присвоенной в конечной точке ветви stmt только в том случае, если она является определенно присвоенной в конечной точке then-stmt; · в обратном случае переменная v не считается определенно присвоенной в ветви потока управления до операции then-stmt или else-stmt либо до конечной точки ветви stmt, если условие else отсутствует. Switch В операторе switch для операции stmt с управляющим выражением expr: · состояние определенного присваивания переменной v в начале выражения expr соответствует состоянию переменной v в начале операции stmt; · состояние определенного присваивания переменной v в ветви потока управления до списка достижимых операторов блока switch соответствует состоянию определенного присваивания переменной v в конце выражения expr. While Для оператора switch для операции stmt в форме: while (выражение) тело_while · переменная v имеет такое же состояние определенного присваивания на начало выражения expr, как и на начало оператора stmt; · если переменная v является определенно присвоенной в конце выражения expr, она является определенно присвоенной в ветви потока управления до операции while-body и до конечной точки операции stmt; · если переменная v имеет состояние «определенно присвоенное в результате выполнения выражения с итогом true» в конце выражения expr, она является определенно присвоенной в ветви потока управления до операции while-body, однако не является определенно присвоенной в конечной точке операции stmt; · если переменная v имеет состояние «определенно присвоенная в результате выполнения выражения с итогом false» в конце выражения expr, она является определенно присвоенной в ветви потока управления до конечной точки операции stmt, однако не является определенно присвоенной в ветви потока управления до операции while-body. Do Для оператора do для операции stmt в форме: do тело_do while (выражение); · переменная v имеет такое же состояние определенного присваивания в ветви потока управления с начала операции stmt до операции do-body, как и в начале операции stmt. · переменная v имеет такое же состояние определенного присваивания в начале выражения expr, как и в конечной точке операции do-body. · если переменная v является определенно присвоенной в конечной точке expr, она является определенно присвоенной в ветви потока управления до конечной точки операции stmt. · если переменная v имеет состояние «определенно присвоенная в результате выполнения выражения с итогом false» в конце выражения expr, она является определенно присвоенной в ветви потока управления до конечной точки stmt. For Проверка определенного присваивания для оператора for в форме for (инициализатор_for;; условие_for; итератор_for;) внедренный_оператор выполняется для следующей формы оператора: { Если условие_for в операторе for опущено, оценка определенного присваивания выполняется таким образом, словно условие_for в приведенной выше развернутой записи оператора было заменено значением true. Break, continue и goto Состояние определенного присваивания переменной v в ветви потока управления, вызванной операторами break, continue или goto, соответствует состоянию определенного присваивания переменной v в начале оператора. Throw Для оператора stmt в форме throw выражение; состояние определенного присваивания переменной v в начале выражения expr соответствует состоянию определенного присваивания переменной v в начале операции stmt. Return Для оператора stmt в форме return выражение; · Состояние определенного присваивания переменной v в начале выражения expr соответствует состоянию определенного присваивания переменной v в начале оператора stmt. · Если переменная v является выходным параметром, она должна быть определенно присвоена в одном из следующих случаев: o после выражения expr; o либо в конце блока finally конструкции try-finally или try-catch-finally, содержащей оператор return. Для оператора stmt в форме return; · Если переменная v является выходным параметром, она должна быть определенно присвоена в одном из следующих случаев: o перед оператором stmt o либо в конце блока finally конструкции try-finally или try-catch-finally, содержащей оператор return. Try-catch Для оператора stmt в форме try блок_try catch(...) блок_catch_1 · Состояние определенного присваивания переменной v в начале try-block соответствует состоянию определенного присваивания переменной v в начале операции stmt. · Состояние определенного присваивания переменной v в начале catch-block-i (для любой переменной i) соответствует состоянию определенного присваивания переменной v в начале операции stmt. · Переменная v в конечной точке операции stmt считается определенно присвоенной только в том случае, если переменная v определенно присвоена в конечной точке try-block и каждого catch-block-i (для каждой переменной i от 1 до n). Try-finally Для оператора stmt в форме try блок_try finally блок_finally · Состояние определенного присваивания переменной v в начале блок_try соответствует состоянию определенного присваивания переменной v в начале операции stmt. · Состояние определенного присваивания переменной v в начале блок_finally соответствует состоянию определенного присваивания переменной v в начале операции stmt. · Переменная v в конечной точке операции stmt считается определенно присвоенной только при соблюдении по меньшей мере одного из следующих условий: o переменная v является определенно присвоенной в конечной точке блок_try o переменная v является определенно присвоенной в конечной точке блок_finally При переключении потока управления (например, в операторе goto), которое начинается в блок_try и завершается вне его, переменная v также считается определенно присвоенной в такой ветви потока управления, если переменная v является определенно присвоенной в конечной точке блок_finally. (Это не единственная возможность — если переменная v является определенно присвоенной по другой причине при таком переключении потока управления, она все еще считается определенно присвоенной.)
|