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

为什么以下方法在Java中不正确?,java,switch-statement,Java,Switch Statement,当我输入以下方法并用Java编译它时,我得到了“error:unreachable statement”,为什么 String getRankChar(int-rank,boolean-isFront) { 转职(职级) { 案例0:返回isFront?”“中断”; 案例1:返回isFront?”[“:”]“中断; 案例2:返回isFront?”[“:”]“中断; 案例3:返回isFront?”(“:”)中断; 案例4:返回isFront?”(“:”)中断; 默认值:返回“”;中断; } } 在

当我输入以下方法并用Java编译它时,我得到了“error:unreachable statement”,为什么

String getRankChar(int-rank,boolean-isFront)
{
转职(职级)
{
案例0:返回isFront?”“中断”;
案例1:返回isFront?”[“:”]“中断;
案例2:返回isFront?”[“:”]“中断;
案例3:返回isFront?”(“:”)中断;
案例4:返回isFront?”(“:”)中断;
默认值:返回“”;中断;
}
}

在每个
return
语句之后都有一个
break
语句。所有那些
break
语句都是不可访问的,这正是因为您在每个语句之前返回

根据JLS的要求:

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

以及:

[…]如果S前面的语句可以正常完成,则非空块(不是开关块)中的每一条语句S都是可访问的

break
continue
return
throw
语句无法正常完成

return
语句无法正常完成,因此无法访问
break
语句(对于您的每个案例)


只要删除
break
语句就可以了。

在每个
return
语句之后都有一个
break
语句。所有那些
break
语句都是不可访问的,这正是因为您在每个语句之前返回

根据JLS的要求:

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

以及:

[…]如果S前面的语句可以正常完成,则非空块(不是开关块)中的每一条语句S都是可访问的

break
continue
return
throw
语句无法正常完成

return
语句无法正常完成,因此无法访问
break
语句(对于您的每个案例)


只要删除
break
语句就可以了。

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

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

返回语句后的代码不可访问,因此请删除返回语句后的任何内容


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

返回语句之后的代码是不可访问的,因此请删除返回语句之后的任何内容


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

返回
停止执行该函数。
因此,所有的
break
s都无法执行

break
不是结束
案例的魔法咒语
;这只是一种确保控件不会通过的方法。

如果使用不同的语句停止控制流(
return
continue
、或
throw
),则不需要它。

return
停止执行该函数。
因此,所有的
break
s都无法执行

break
不是结束
案例的魔法咒语
;这只是一种确保控件不会通过的方法。

如果使用不同的语句停止控制流(
return
continue
、或
throw
),则不需要它。

,因为默认情况下的break语句将永远不会执行,因为它将始终返回“”然后退出该方法。

因为默认情况下的break语句将永远不会执行,因为它将始终返回“”然后退出该方法。

由于您之前执行了返回,因此无法访问每行中的break语句。

由于您之前执行了返回,因此无法访问每行中的break语句。

return表示从调用该方法的点退出

指针不再继续前进

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


因此,错误返回意味着退出调用方法的点

指针不再继续前进

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


因此,错误

是因为返回后光标退出块被调用,因为返回后光标退出块在此处被调用。我们其他人现在都可以回家了@戴维德瓦尔斯,我也在这里。所以别担心:D@MarounMaroun哈哈=)我只是觉得在投票中看到Jon的答案会很有趣,因为我们在同样的10秒钟内回答了,但是。。。不,每个人都投他的票。:)乔恩来了。我们其他人现在都可以回家了@戴维德瓦尔斯,我也在这里。所以别担心:D@MarounMaroun哈哈=)我只是觉得在投票中看到Jon的答案会很有趣,因为我们在同样的10秒钟内回答了,但是。。。不,每个人都投他的票。:)只是好奇:我也知道这些规则,但我不知道在JLS中每个规则都在哪里解释或澄清。所以我的问题是:你或多或少知道每个主题在JLS中的位置吗?@MartijnCourteaux:不知道,但我通常可以很快从目录中找到它。我越来越擅长导航语言规范,尽管我发现C规范在这方面比Java规范容易得多。@JonSkeet:是的,我也能做到。但是你的速度太快了,我以为你只是粗略地知道在目录里应该找到什么。在两分钟内,一个很好的回答,其中提到了JLS。@MartijnCourteaux:我知道了
  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;
    }
}