编程语言中一开始就有goto关键词了。事实上,goto起源于汇编语言的程序控制:“若条件A成立,则跳到这里;否则跳到那里”。
goto语句是在源码级上的跳转,这使其招致了不好的声誉。若一个程序总是从一个地方跳到另一个地方,还有什么办法能识别程序的控制流程呢?
其实真正的问题并不在于使用goto语句,而在于goto的滥用;而且在少数情况下,goto还是组织控制流程的最佳手段。结束
尽管goto仍是Java中的一个保留字,但在语言中并未使用它;Java没有goto。然而,Java也能完成一些类似于跳转的操作,这与break和continue这两个关键词有关。它们其实不是一个跳转,而是中断迭代语句的一种方法。之所以把它们纳入goto问题中讨论,是因为它们使用相同的机制:标签。
标签是后面跟有冒号的标示符,就想下面这样:
lable1:
在java中,标签起作用的唯一地方刚好是在迭代语句之前。而在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者一个开关。这是由于break和continue关键词通常只中断当前循环,但若是随同标签一起使用,他们就会中断循环,知道标签所在的地方:
下面是标签在for循环中的示例:
@Test public void TestLable(){ int i=0; outer: for(; true; ){ inner: for(; i<10; i++){ System.out.println("i = "+i); if(i == 2){ System.out.println("continue"); continue; } if(i == 3){ System.out.println("break"); i++; break; } if(i == 7){ System.out.println("continue outer"); i++; continue outer; } if(i == 8){ System.out.println("break outer"); break outer; } for(int k = 0; k < 5; k++){ if(k == 3){ System.out.println("continue inner"); continue inner; } } } } System.out.println("结束"); } 结果: i = 0 continue inner i = 1 continue inner i = 2 continue i = 3 break i = 4 continue inner i = 5 continue inner i = 6 continue inner i = 7 continue outer i = 8 break outer 结束
结束
同样的规则亦适用于while:
1)、一般的continue会退回内层循环的开头,并继续执行。
2)、带标签的continue会到达标签的位置,并重新进入紧接在哪个标签后面的循环。
3)、一般的break会中断并跳出当前循环。
4)、带标签的break会中断并跳出标签所指的循环。
重点:在Java中需要使用标签的唯一理由就是因为有循环嵌套的存在,而且想从多层嵌套中break或者continue;
相关推荐
- **结构化的胜利**:与早期语言过度依赖GOTO语句相比,C语言支持更为清晰的控制结构,大大提高了代码的可读性和维护性。 - **Pascal的局限**:虽然Pascal是一种结构化语言,但由于其设计效率较低且缺乏某些关键特性...
- `goto`是Java中的保留字,但目前Java语言并没有实现这个关键字,因此在Java程序中无法使用`goto`。 3. **&和&&的区别**: - 逻辑运算符`&`和`&&`都可以用于布尔逻辑运算。两者都会检查两边的表达式,但`&&`具有...
在Java中,使用`break`关键字可以立即退出当前循环,但如果想要跳出多重嵌套循环,可以使用标签化循环结构,即为外层循环添加一个标签,然后在内层循环中使用`break`加上标签来退出整个结构。 #### 5. switch语句...
在JavaSE语法部分,面试可能会考察对特定语句或操作的理解,如Java没有`goto`语句,这与C/C++等语言不同,体现了Java的控制流程更为严谨。`&`和`&&`的区别在于逻辑与运算的短路特性,`&&`只有当左侧表达式为真时才会...
Java的简单性主要体现在它简化了C++语言中的复杂特性,例如移除了goto语句,并采用了break和continue来控制程序流程。与此同时,Java放弃了对操作符重载和多继承的支持,以避免程序设计中可能出现的复杂性。这些设计...
这个问题实际上是在考察Java语言对goto语句的态度和使用限制,从而理解Java语言的设计哲学。 3. 逻辑运算符:& 和 && 运算符的使用区别。这是在考察对这两个逻辑运算符的理解,包括它们的短路特性以及效率方面的...
例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不...
Java保留了goto关键字,但是Java语言的设计者不鼓励使用goto语句,因为它会导致代码难以理解和维护。因此,虽然Java编译器认识goto关键字,但一般情况下不推荐使用。 以上是对给定文件内容的详细知识点介绍。希望能...
- **不再使用goto语句**:去除goto以增强代码的可读性和可维护性。 - **不再使用运算符重载**:避免运算符重载可能带来的混淆。 - **不再使用自动类型转换**:减少由于隐式转换引起的错误。 - **不再使用指针**:...
- b) goto —— goto是保留关键字,虽然不是常用的关键字,但它存在于Java中。 - c) case —— 是Java关键字,用于switch语句中。 - d) while —— 是Java关键字,用于循环结构。 - **正确答案:** A (then) --...
10. goto语句:C#支持goto,但使用谨慎,Java不支持。 11. 数组声明:C#的数组声明中,[]必须紧跟类型,而不是变量名。 12. 命名空间别名:C#允许使用using语句为命名空间指定别名。 13. 包和程序集:Java的包直接...
尽管如此,Java提供了一个类似的结构化跳转语句——`break` 和 `continue`,它们可以用来控制循环的流程。另外,通过标记化的 `break` 语句,可以在一定程度上模拟 `goto` 的功能。 **3. 说说 & 和 && 的区别。** ...
2.1.2 使用goto语句进行出错处理 2.1.3 出错处理的一般模型 2.2 C语言中的分支结构 2.2.1 分支结构的翻译 2.2.2 使用goto语句实现分支结构 2.3 短路计算 2.3.1 短路计算 2.3.2 &&运算的短路计算 2.3.3 ||运算的短路...
要跳出多重嵌套循环,可以使用标签化 `break` 语句或者使用 `return` 语句(如果在方法体内)。例如: ```java outerLoop: for (int i = 0; i ; i++) { for (int j = 0; j ; j++) { if (i == 5 && j == 5) { ...
然而,Java中提供了一个类似的替代方案——标签化的`break`语句,它可以用于跳出多重循环。 #### 3. `&` 和 `&&` 的区别 在Java中,`&` 和 `&&` 都可以用于逻辑与运算,但它们之间存在一些关键差异: - **按位与(`...