A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 涂金哲 中级黑马   /  2012-7-31 16:16  /  2199 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java没有goto语句 那么带标签的
class Test2
{
    public static void main (String[] args)
    {
        outer:for(int i=0;i<10;i++){
            if(i==2)
                break outer;
                for(int j=0;j<5;j++){
                    if (j==2)
                        continue outer;
                        System.out.println("j="+j);
            }
            System.out.println(i);
        }
            
    }
}
这种带标签的循环实现的功能跟goto在其他语言中的功能有区别吗?
            

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
Java语言中goto是保留关键字,没有goto语句,也没有任何使用goto关键字的地方。
回复 使用道具 举报
为了避免goto带来的错误,Java把goto设置为保留字。所以不能给变量命名goto。但可以取Goto等,因为java严格区分大小
goto不属于关键字,所以goto不能发挥任何作用。
回复 使用道具 举报
有区别
goto语句在java中作为保留字,并没有实现它。但在其他语言中(c语言),goto是个合法的关键字
java中支持的break和continue虽然能实现goto语句的功能但是我个人总结他们的用法大同小异

首先在java中对标号的要求非常严格
标号必须在一个循环的前面,意思是这个循环的名字叫outer(假设标号名为outer),并且这一行后面不能有任何语句了;
而break和continue是和循环语句结合使用的,因此实际上语句标签的使用也是和循环紧密结合的。
语句标签在被使用的情况,只能定义在循环迭代语句之前,否则编译出错
因此带标号的break、continue 只能在循环体或者选择体(if等)之中跳转

而(c语言)goto的用法则比较灵活,(c语言)中的标号可以在任意一个合法语句的前面
因此goto可以在一个函数(c语言)中任意位置跳转(当然不能违反goto语句的合理用法例如不能再嵌套之间跳转等)

因此 个人总结
带标号的break、continue局限于循环体中跳转
带标号的goto 可以在整个方法中(c语言函数)跳转
goto比带标号的break、continue用法灵活 正因为太灵活了
使程序的逻辑结构变的复杂,流程不够清晰,程序的可读性下降
所以java中把goto 保留了

评分

参与人数 1黑马币 +15 收起 理由
杨志 + 15

查看全部评分

回复 使用道具 举报
焦晨光 发表于 2012-7-31 22:05
有区别
goto语句在java中作为保留字,并没有实现它。但在其他语言中(c语言),goto是个合法的关键字
java ...

非常感谢您的解释!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马