Java中为了使程序结构更加合理,虽然保留了goto这个关键字,但并没有实现其功能。取而代之的是“标签”。1.下面是《java 编程思想》中对“标签”的论述:
标签是后面跟着冒号的标识符,如下:
label:
在Java中标签起作用的唯一的地方刚好是在迭代(循环)语句之前。“刚好之前”的说在标签和迭代语句之间置入任何语句都不好。由于break和continue的关键词通常只会中断当前的循环,但如随同标签一起使用,他们就会中断循环,直到标签所在的地方:
label:
外循环入口{
内循环入口{
break; //(1)
continue; //(2)
continue label; //(3)
continue label; //(4)
}
}
(1)break中断内部循环,回到外部循环。
(2)continue使执行点移回内部循环的起始处。
(3)continue label同时中断内部循环及外部循环,直接转到label处,随后,它实际上是继续循环过程,但却从外部循环开始。
(4)break label也会中断所有循环,回到label处,但并不从新进入循环,即实际上是完全中止了两个循环。
注意:
(1)上面提到的循环适用于for语句和while语句。
(2)在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中break或continue。
(3)在平时写程序时标签虽然在使用时有了许多限制,没有goto自由,但同样会会使使较难以分析,容易是程序控制混乱。虽然作者Bruce Eckel强调Java的标签在使用限制下,不会存在程序难以分析的情况。但我个人认为“标签”的使用是在程序“不得已”时才“可为之”,少用为妙。
标签是后面跟着冒号的标识符,如下:
label:
在Java中标签起作用的唯一的地方刚好是在迭代(循环)语句之前。“刚好之前”的说在标签和迭代语句之间置入任何语句都不好。由于break和continue的关键词通常只会中断当前的循环,但如随同标签一起使用,他们就会中断循环,直到标签所在的地方:
label:
外循环入口{
内循环入口{
break; //(1)
continue; //(2)
continue label; //(3)
continue label; //(4)
}
}
(1)break中断内部循环,回到外部循环。
(2)continue使执行点移回内部循环的起始处。
(3)continue label同时中断内部循环及外部循环,直接转到label处,随后,它实际上是继续循环过程,但却从外部循环开始。
(4)break label也会中断所有循环,回到label处,但并不从新进入循环,即实际上是完全中止了两个循环。
注意:
(1)上面提到的循环适用于for语句和while语句。
(2)在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中break或continue。
(3)在平时写程序时标签虽然在使用时有了许多限制,没有goto自由,但同样会会使使较难以分析,容易是程序控制混乱。虽然作者Bruce Eckel强调Java的标签在使用限制下,不会存在程序难以分析的情况。但我个人认为“标签”的使用是在程序“不得已”时才“可为之”,少用为妙。