该
}方法的最终版本无法访问-只有在可能返回方法末尾而不返回值的情况下,您才会收到编译错误。
这在由于异常而导致方法的末尾无法到达的情况下更有用。
private String find(int minLength) { for (String string : strings) { if (string.length() >= minLength) { return string; } } throw new SomeExceptionIndicatingTheProblem("...");}规则在JLS第8.4.7节中:
如果声明某个方法具有返回类型(第8.4.5节),则如果该方法的主体可以正常完成(第14.1节),则会发生编译时错误。
您的方法无法正常完成,因此没有错误。重要的是,不仅是它不能正常完成,而且规范还 承认 它不能正常完成。从JLS
14.21开始:
一
while当且仅当下面至少有一个为真语句可以正常完成:
- 该
while语句是可到达的,条件表达式不是带有value的常数表达式(第15.28节)true。- 有一个可到达的
break语句退出该while语句。
在您的情况下,条件表达式 是
一个带有value的常量
true,并且没有任何
break语句(可到达或其他方式),因此该
while语句无法正常完成。



