为什么以下方法在Java中不正确?
当我输入以下方法并用Java编译它时,我得到了“error:unreachable statement”,为什么为什么以下方法在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?”(“:”)中断; 默认值:返回“”;中断; } } 在
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;
}
}