`

java的goto语句—— 标签的使用

阅读更多

      编程语言中一开始就有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;

 

 

分享到:
评论

相关推荐

    java2——经典的java开发教程

    - **结构化的胜利**:与早期语言过度依赖GOTO语句相比,C语言支持更为清晰的控制结构,大大提高了代码的可读性和维护性。 - **Pascal的局限**:虽然Pascal是一种结构化语言,但由于其设计效率较低且缺乏某些关键特性...

    java——面试题

    - `goto`是Java中的保留字,但目前Java语言并没有实现这个关键字,因此在Java程序中无法使用`goto`。 3. **&和&&的区别**: - 逻辑运算符`&`和`&&`都可以用于布尔逻辑运算。两者都会检查两边的表达式,但`&&`具有...

    Java程序员面试宝典——2012版

    在Java中,使用`break`关键字可以立即退出当前循环,但如果想要跳出多重嵌套循环,可以使用标签化循环结构,即为外层循环添加一个标签,然后在内层循环中使用`break`加上标签来退出整个结构。 #### 5. switch语句...

    BAT——Java面试宝典Beta5.0

    在JavaSE语法部分,面试可能会考察对特定语句或操作的理解,如Java没有`goto`语句,这与C/C++等语言不同,体现了Java的控制流程更为严谨。`&`和`&&`的区别在于逻辑与运算的短路特性,`&&`只有当左侧表达式为真时才会...

    java基础知识总结(一)(csdn)————程序.pdf

    Java的简单性主要体现在它简化了C++语言中的复杂特性,例如移除了goto语句,并采用了break和continue来控制程序流程。与此同时,Java放弃了对操作符重载和多继承的支持,以避免程序设计中可能出现的复杂性。这些设计...

    java面试宝典

    这个问题实际上是在考察Java语言对goto语句的态度和使用限制,从而理解Java语言的设计哲学。 3. 逻辑运算符:& 和 && 运算符的使用区别。这是在考察对这两个逻辑运算符的理解,包括它们的短路特性以及效率方面的...

    毕业设计——流媒体视频直播服务器(Java + MySQL + FFmpeg + RTSP + RTP).zip

    例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不...

    Java面试笔试题大汇总(最全+详细答案)

    Java保留了goto关键字,但是Java语言的设计者不鼓励使用goto语句,因为它会导致代码难以理解和维护。因此,虽然Java编译器认识goto关键字,但一般情况下不推荐使用。 以上是对给定文件内容的详细知识点介绍。希望能...

    JAVA白皮书(英文版)

    - **不再使用goto语句**:去除goto以增强代码的可读性和可维护性。 - **不再使用运算符重载**:避免运算符重载可能带来的混淆。 - **不再使用自动类型转换**:减少由于隐式转换引起的错误。 - **不再使用指针**:...

    JAVA & OOP试题.doc

    - b) goto —— goto是保留关键字,虽然不是常用的关键字,但它存在于Java中。 - c) case —— 是Java关键字,用于switch语句中。 - d) while —— 是Java关键字,用于循环结构。 - **正确答案:** A (then) --...

    java与C#的区别 (2).pdf

    10. goto语句:C#支持goto,但使用谨慎,Java不支持。 11. 数组声明:C#的数组声明中,[]必须紧跟类型,而不是变量名。 12. 命名空间别名:C#允许使用using语句为命名空间指定别名。 13. 包和程序集:Java的包直接...

    Java面试题

    尽管如此,Java提供了一个类似的结构化跳转语句——`break` 和 `continue`,它们可以用来控制循环的流程。另外,通过标记化的 `break` 语句,可以在一定程度上模拟 `goto` 的功能。 **3. 说说 & 和 && 的区别。** ...

    Linux C程序设计大全

    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 ||运算的短路...

    Java面试宝典

    要跳出多重嵌套循环,可以使用标签化 `break` 语句或者使用 `return` 语句(如果在方法体内)。例如: ```java outerLoop: for (int i = 0; i ; i++) { for (int j = 0; j ; j++) { if (i == 5 && j == 5) { ...

    Java面试宝典2014版

    然而,Java中提供了一个类似的替代方案——标签化的`break`语句,它可以用于跳出多重循环。 #### 3. `&` 和 `&&` 的区别 在Java中,`&` 和 `&&` 都可以用于逻辑与运算,但它们之间存在一些关键差异: - **按位与(`...

Global site tag (gtag.js) - Google Analytics