2011-12-04 59 views
2

在下面的代码中,为什么它没有最后一个return语句就不能编译。Java编译行为

private boolean fileExists(final File[] files, final String name) { 
    if (files == null || files.length == 0) { 
     return false; 
    } 
    for (final File file : files) { 
     return true; 
    } 
    return false; // why is this neessary? 
} 
+1

简化的例子可以是'boolean syntaxCheck(){if(true){return true; } return false;/*为什么'return false'必要?* /}' – gnat

回答

1

因为如果files为空会发生什么?

您需要第二个返回语句。

1

因为files可能是空的。该方法必须在签名中定义的所有情况下返回一个布尔值!

1

如果files是空的(毕竟编译器不知道),那么什么都不会返回。

3

如果files为空,则不进入循环,但函数需要返回boolean。这就是为什么

-3

如果iffor里面的return没有执行,我们仍然需要返回一个值。因此需要return声明。

查看代码,我们看到iffor中的返回将被命中,但这不能由编译器推断。

1

因为你宣称的方法。如果你不希望它返回任何东西,然后宣布你可能需要“的方法,“无效”

private void fileExists(final File[] files, final String name) 

返回boolean值

private boolean fileExists(final File[] files, final String name) 

返回',因为如果两个'if'陈述都是错误的,会发生什么?