Что означает немедленное завершение для оператора if?

Означает ли «немедленное нормальное завершение» то, что оператор if фактически обойден и его условие не оценивается?

ИЗМЕНИТЬ:

Я намеренно опустил пример, чтобы понять саму фразу из спецификации Java относительно оператора if.

Но, кажется, никто даже не рассматривал эту фразу в этом контексте.

Итак, вот демонстрационная программа.

import java.io.*;

class TestBreakWIthLabel
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int x = 1;

        L:if ( x++ < 2 ) break L;

        System.out.println( "x = " + x );
    }
}

Но это плохая идея, что кто-то даст свое «объяснение», глядя на программу. Я хочу знать значение фразы независимо от примера программы.

Вот соответствующая цитата из Спецификации (14.15 Заявление о разрыве).

Оператор break с идентификатором метки пытается передать управление вложенному оператору с меткой (§14.7), который имеет тот же идентификатор, что и его метка; этот оператор, который называется целью прерывания, затем немедленно завершается нормально. В этом случае цель break не обязательно должна быть переключателем, оператором while, do или for.


person Vlad from Moscow    schedule 24.04.2019    source источник
comment
Некоторый (любой?) контекст для этого вопроса был бы полезен.   -  person Scott Hunter    schedule 24.04.2019


Ответы (1)


Предполагая, что вы имеете в виду эту часть JLS

Оператор break с label Identifier пытается передать управление окружающему оператору с меткой (§14.7), который имеет тот же Identifier, что и его label; этот оператор, который называется break target, затем немедленно завершается нормально. В этом случае цель break не обязательно должна быть оператором switch, while, do или for.

где цель break — это оператор if, тогда заключающий его оператор с меткой — это оператор if, и его условие уже было оценено, поскольку вы находитесь внутри его тела, его содержащегося оператора. После завершения он снова не оценивается.

person Savior    schedule 24.04.2019