我不明白以下带有 break + 标签的 Java 片段的输出(就像其他语言中的 goto)
I don't understand the output of the following Java snippet with break + labels (like goto in other languages)
我不明白以下代码的输出:
public class testBreak
{
public static void runTest()
{
high_level:
{
System.out.println("\nEnter in High Level");
middle_level:
for(int i = 0; i < 4; i++)
{
System.out.println("Enter in Middle level cicle");
int j = 0;
low_level:
while(j++ < 2)
{
System.out.println("Enter in Low level cicle");
System.out.println("i = " + i + ";j = " + j);
switch(i)
{
case 0 : break;
case 1 : break low_level;
case 2 : break middle_level;
case 3 : break high_level;
}
System.out.println("Exit from Low level cicle");
}
System.out.println("Exit from Middle level cicle");
}
System.out.println("Exit from High level cicle");
}
}
public static void main(String args[])
{
runTest();
}
}
这是输出:
Enter in High Level
Enter in Middle level cicle
Enter in Low level cicle
i = 0;j = 1
Exit from Low level cicle
Enter in Low level cicle
i = 0;j = 2
Exit from Low level cicle
Exit from Middle level cicle
Enter in Middle level cicle
Enter in Low level cicle
i = 1;j = 1
Exit from Middle level cicle
Enter in Middle level cicle
Enter in Low level cicle
i = 2;j = 1
Exit from High level cicle
我明白了 i = 1;j = 1
但为什么它会到达 Exit from Middle level cicle
而不是 Enter in low level cicle
因为我们有 j = 1 并且 while(j++ < 2) 应该取 1 < 2,然后将 j 增加到 2 并进入低级循环作为它在第一个 运行??
editet: 好像break with label 不等于goto,它跳出labeled 循环?并且循环在 C/C++ 中的代码中不是自由的,但它应用于该特定循环?
当 i = 1
时,您告诉它突破 low_level
标签。 low_level
下面的循环停止循环,然后打印 Exit from Middle level cicle
。通过这样做,您然后在 middle_level
循环下方再次循环,这就是它然后打印 Enter in Middle level cicle
.
的原因
摘自 Oracle 的 Java 教程:
The break statement terminates the labeled statement; it does not
transfer the flow of control to the label. Control flow is transferred
to the statement immediately following the labeled (terminated)
statement.
这是否回答了您的问题?
我不明白以下代码的输出:
public class testBreak
{
public static void runTest()
{
high_level:
{
System.out.println("\nEnter in High Level");
middle_level:
for(int i = 0; i < 4; i++)
{
System.out.println("Enter in Middle level cicle");
int j = 0;
low_level:
while(j++ < 2)
{
System.out.println("Enter in Low level cicle");
System.out.println("i = " + i + ";j = " + j);
switch(i)
{
case 0 : break;
case 1 : break low_level;
case 2 : break middle_level;
case 3 : break high_level;
}
System.out.println("Exit from Low level cicle");
}
System.out.println("Exit from Middle level cicle");
}
System.out.println("Exit from High level cicle");
}
}
public static void main(String args[])
{
runTest();
}
}
这是输出:
Enter in High Level
Enter in Middle level cicle
Enter in Low level cicle
i = 0;j = 1
Exit from Low level cicle
Enter in Low level cicle
i = 0;j = 2
Exit from Low level cicle
Exit from Middle level cicle
Enter in Middle level cicle
Enter in Low level cicle
i = 1;j = 1
Exit from Middle level cicle
Enter in Middle level cicle
Enter in Low level cicle
i = 2;j = 1
Exit from High level cicle
我明白了 i = 1;j = 1
但为什么它会到达 Exit from Middle level cicle
而不是 Enter in low level cicle
因为我们有 j = 1 并且 while(j++ < 2) 应该取 1 < 2,然后将 j 增加到 2 并进入低级循环作为它在第一个 运行??
editet: 好像break with label 不等于goto,它跳出labeled 循环?并且循环在 C/C++ 中的代码中不是自由的,但它应用于该特定循环?
当 i = 1
时,您告诉它突破 low_level
标签。 low_level
下面的循环停止循环,然后打印 Exit from Middle level cicle
。通过这样做,您然后在 middle_level
循环下方再次循环,这就是它然后打印 Enter in Middle level cicle
.
摘自 Oracle 的 Java 教程:
The break statement terminates the labeled statement; it does not transfer the flow of control to the label. Control flow is transferred to the statement immediately following the labeled (terminated) statement.
这是否回答了您的问题?