Что означает «немедленно завершается нормально» для оператора if? - PullRequest
1 голос
/ 24 апреля 2019

Означает ли "немедленное выполнение нормально", что оператор 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 Оператор прерывания).

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

1 Ответ

4 голосов
/ 24 апреля 2019

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

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

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

...