java - 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 语句。
解决方案
假设您指的是 JLS 的这一部分
试图将控制权转移到与
break
;相同的封闭标记语句(第 14.7 节)的 语句 这个被称为 目标的语句,然后立即正常完成。在这种情况下, 目标不必是, , , 或语句。label Identifier
Identifier
label
break
break
switch
while
do
for
其中break
目标是一个if
语句,那么封闭的标记语句是if
语句,并且它的条件已经被评估,因为你在它的主体内,它包含的 Statement。它不会在完成时再次评估。
推荐阅读
- jquery - 将 thymeleaf 表值发送到控制器
- typescript - 开玩笑描述套件失败,但独立运行测试成功
- python - 如何在 seaborn barplot 中添加更多网格?
- jira - 如何将 Gerrit(Open/Merged/Abandoned) 状态与 Jira 集成?
- xamarin - 使用 MVVM 模式将网格中的条目值作为列表获取
- c# - 如何对无状态 Service Fabric 服务进行分区
- c - 埃拉托色尼筛 - 按位优化问题
- mongodb - PySpark TimestampType() 提供错误的转换:ValueError: year 52129 is out of range
- slickgrid - 如何更改角度 slickgrid 中的标签度量?
- javascript - 尽管 Node js 中的一切都是正确的,但无法从 aws s3 下载图像