首页 > 解决方案 > 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 The break Statement)。

带有标签 Identifier 的 break 语句尝试将控制转移到封闭的带有标签的语句(第 14.7 节),该语句具有与其标签相同的 Identifier;该语句称为中断目标,然后立即正常完成。在这种情况下,break 目标不必是 switch、while、do 或 for 语句。

标签: javaif-statementbreakjava-11

解决方案


假设您指的是 JLS 的这一部分

试图将控制权转移到与break;相同的封闭标记语句(第 14.7 节)的 语句 这个被称为 目标的语句,然后立即正常完成。在这种情况下, 目标不必是, , , 或语句。label IdentifierIdentifierlabelbreakbreakswitchwhiledofor

其中break目标是一个if语句,那么封闭的标记语句是if语句,并且它的条件已经被评估,因为你在它的主体内,它包含的 Statement它不会在完成时再次评估。


推荐阅读