JAVA:为什么我在编译期间返回错误?

时间:2013-02-19 16:04:43

标签: java return try-catch

我在编译时继承了一些错误的代码。我收到了两个错误之一:一个是return语句丢失,另一个错误throw / try / catch。此错误似乎return语句的位置相关,我一直在整个上午移动。它的当前位置产生error: missing return statement。被注释掉的任何一个返回都会产生一条消息,我必须使用try声明catchthrow

考虑:

static private List<File> getFileListingNoSort(File aDirectory) throws FileNotFoundException {

try {
    List<File> result = new ArrayList<File>();
    File[] filesAndDirs = aDirectory.listFiles();
    List<File> filesDirs = Arrays.asList(filesAndDirs);
    for(File file : filesDirs) {
         result.add(file); //always add, even if directory
         if ( ! file.isFile() ) {
              List<File> deeperList = getFileListingNoSort(file);
              result.addAll(deeperList);
           // return result;
         } //close if
      // return result;
     } // close for
     } // close try for getFileListingNoSort
   // return result;
 catch (Exception exp) {
      System.err.println("Error: " + exp.getMessage());
 } //close catch getFileListingNoSort
 return result;
} //close method

我会认为返回将在尝试之后,但在捕获之前。但是,这对我不起作用。我不确定为什么我会得到这些区域,除了误解程序如何与try / catch一起流动。有人能告诉我最适合回归的地方并解释原因吗?

5 个答案:

答案 0 :(得分:4)

而不是

try {
    List<File> result = new ArrayList<File>();

DO

List<File> result = new ArrayList<File>();
try {

这样,变量resulttry/catch阻止后不会超出范围。

该列表将包含在异常发生之前添加的所有元素。

答案 1 :(得分:3)

您的方法必须正常返回ALWAYS,或者发出异常。

如果你的catch子句没有抛出Exception,你需要一个return语句作为catch的最后一个语句,或者在catch之后。

当您想要在try块之外返回某些内容时,必须先在中定义,然后才能进行尝试。

例如,如果你想在try中返回一些值(如果一切顺利的话),如果你得到一个Exception就返回null,你的代码看起来像这样:

try{
   ... do loads of stuff
   return value;
} catch(Exception e) {
    e.printStackTrace(); //log it, whatever
    return null;
}

答案 2 :(得分:2)

您在try块中定义result,但(尝试)将其返回到块之外。这不会起作用,因为变量超出了范围。解决此问题的最简单方法是在try块之外声明结果变量。

答案 3 :(得分:1)

result在try块中,可能未初始化。将它放在try块之外可以解决你的问题。

答案 4 :(得分:1)

首先,您尝试访问result块中声明的try变量,并且不会显示该变量。