为什么Java中的以下方法不正确?

时间:2013-10-29 21:09:55

标签: java switch-statement

当我输入以下方法并用Java编译时,我得到了“错误:无法访问的语句”,为什么?

  String getRankChar(int rank,boolean isFront)
  {
    switch (rank)
    {
      case 0 : return isFront?"<":">";break;
      case 1 : return isFront?"[":"]";break;
      case 2 : return isFront?"[":"]";break;
      case 3 : return isFront?"(":")";break;
      case 4 : return isFront?"(":")";break;
      default : return " ";break;
    }
}

7 个答案:

答案 0 :(得分:10)

每个break语句后都有return语句。 所有这些break语句都无法访问,正是因为您在每个语句之前返回。

根据JLS的section 14.21

  

如果由于无法访问语句而无法执行该语句,则为编译时错误。

  

[...]如果S之前的语句可以正常完成,则非空交换块中的每个其他语句S都是可到达的。

     

...

     

breakcontinuereturnthrow声明无法正常完成。

return语句无法正常完成,因此无法访问break语句(对于每种情况)。

只需删除break语句即可。

答案 1 :(得分:2)

因为默认情况下的break语句永远不会执行,因为它总是返回“”并退出方法。

答案 2 :(得分:1)

因为您return然后是break。返回已经退出该方法,因此break语句无法访问。

答案 3 :(得分:1)

因为你之前做过返回,所以无法达到每行中的break语句。

答案 4 :(得分:0)

返回语句后的代码无法访问,因此请删除return语句之后的任何内容。

因为在你回来之后,没有什么可以执行的。

答案 5 :(得分:0)

return停止执行该功能 因此,您的所有break都无法执行。

break不是结束case的神奇咒语;这只是一种确保控制不会流过的方法 如果您使用不同的语句来停止控制流(returncontinuethrow),则不需要它。

答案 6 :(得分:0)

return表示退出调用方法的点

并且指针不再继续

因此,您的程序在任何情况下都不会达到您的break声明

因此错误