GOTO语句使程序的静态结构和动态结构不一致,从而使程序难以理解,难以查错。
goto语句的结果:在C/C++等高级编程语言中保留了goto语句,但被建议不用或少用。在一些更新的高级编程语言,如Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使 用,使程序简洁易读;尽管如此后来的c#还是支持goto语句的,goto语句一个好处就是可以保证程序存在唯一的出口,避免了过于庞大的if嵌套。
goto语句
goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
如: label: i++
loop: while(x<7)
C语言不限制程序中使用标号的次数,但各标号不得重名。goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句。
goto语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
Java不存在goto语句,但是已经用”类名.方法“的形式进行方法调用。解释:goto语句作为java的保留字段,但是没有实际的应用的。goto语句实际上是C语言的范畴,用来定义指针跳转用的,java中通过”类名.方法“的形式进行的方法调用,不在用goto语句进行实现,这个是java的一大改进。
JAVA中实现goto语句功能 :
使用方法如下:
1 label0:
2 for (int k = 0k <10k++) {
3 ..........
4 label1:
5 for (int j = 0j <10j++) {
6 ................
7 break label0
8 }
9 ...........
10 label2:
11 for (int kk = 0kk <10kk++) {
12 ..............
13 break label0
14 }
15 }
16 System.out.println("here")
将需要跳转的到的循环开始处使用lablename:的方式标注(lablename是自定义标签名)
例如,第1行代码所示.在循环体内,可以使用break lablename或者continue lablename跳转到该处第1行代码的地方,第7行代码执行后,将跳转到第1行代码处.
break 和continue的区别就是,break跳到lablename处后,接下来是执行该lablename所代表的循环之后的语句,例如第16行代码而 continue则是将循环记数加1或者减1继续执行lablename所代表的循环,直到条件不满足或遇到return语句为止.
这样我们就可以在循环中任何位置跳转到父循环外去,无论嵌套多深.
注意:
1. lablename标签名和所代表的标签之前不能有任何其他的语句,例如第1行和第2行之间不能有其他的任何语句出现,否则编译不通过
2.该跳转只能跳转到祖先级循环,同级循环之间不能跳转,例如第13行不能跳转到第4行
3.虽然该跳转在一定程度上方便了编程,不过最好尽量避免,因为它和goto一样在一定程度上破坏了结构化编程的特点。
更详细的例子可参考如下链接:http://lavasoft.blog.51cto.com/62575/178997/