ledkaa 2011-06-20 10:41
浏览 231
已采纳

think in java中一段代码的疑惑,关于switch

public Shape next() {
    switch (random.nextInt(3)) {
    default:
    case 0:
        return new Circle();
    case 1:
        return new Square();
    case 2:
        return new Triangle();
    }
}

 default放在'return new Triangle();'下面,eclipse会出现红x,you must return a result of type Shape,这很好理解

 

default放在'case 0'上面,就不会出现上面的编译错误,不懂是为什么,可能switch-case的机制还没有理解透?

 

哪位大虾帮忙解释解释


问题补充
这是怎么了。。20几个阅读,没有回复的
问题补充
gtssgtss 写道
自动贯穿。。。。
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧



我被鄙视了。。还真不知道这特性
问题补充
gtssgtss 写道
自动贯穿。。。。
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧


你说的是哪本书?自动贯穿这名称google没搜到
问题补充
确实是很纠结的一个特性。。
实验了一把
找到了一段话,自己也总结了一点


没有case匹配的时候,执行default中的内容,default中没有退出switch-case的语句,默认执行default下面case下的语句,如果第一个case下没有return,会接着执行下面的case,一直执行到return 语句


switch (10) { 
    default: 
    case 0: 
        System.out.println("0"); 
    case 1: 
        System.out.println("1"); 
    case 2: 
        return new Triangle(); 
    } 


这样改的话,它就会打印出0,1,然后return

问题补充
lqixv 写道
估计你是看书不仔细。你回头看看对 switch 语句的解释,在 case 里,如果没有 break 是不会跳出 switch 的。因此,你把 default 放在后面的话,就相当于 在找不到 0、1、2 时,没有return 值了。而你的方法本应该返回 Shape,那肯定报错了


估计你问题没有看清楚吧,我知道case 没有break是不会跳出的,这里讨论的是如果没有case可以匹配上,default放在最上面,会执行default下的case,直到return或break为止。
  • 写回答

30条回答 默认 最新

  • fuckcdn 2011-06-20 10:41
    关注

    动手实验下,一切明了...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(29条)

报告相同问题?

悬赏问题

  • ¥15 任务是接收数据并把数据写入DAC7311,这些代码能实现此功能吗
  • ¥15 分析FP -Growth代码运行内存太大而无法运行的原因
  • ¥20 qtcreat 使用msvc编译器开发软件运行时字体锯齿感严重
  • ¥15 为何显示keyerror fruit
  • ¥15 关于#stm32#的问题:/* User can add his own implementation to report the HAL error return state */
  • ¥15 imageware粗糙度表面
  • ¥15 python使用pulp线性优化时报错
  • ¥15 为什么我的uibot导入py模块出错呀。py文件放在了uibot里对应的python文件夹了,卸了重安也不行
  • ¥15 开源或低价数据中台哪个最好
  • ¥15 arduino编程出现字符串疑似覆盖现象