try / catch之后的Java返回类型

时间:2012-06-11 09:35:11

标签: java android return try-catch

我想从我创建的方法返回String类型的数据。 Eclipse说需要在try catch块之后指定一个返回类型...当我这样做时,Eclipse然后告诉我,我需要将String数据声明为Local变量......这里出了什么问题?

private String ReadData() {
    try {
        FileInputStream fis = null;
        InputStreamReader isr = null;
        String data = null;
        fis = KVOContact.this.openFileInput("data.txt");
        isr = new InputStreamReader(fis);
        char[] inputBuffer = new char[fis.available()];
        isr.read(inputBuffer);
        data = new String(inputBuffer);
        isr.close();
        fis.close();

    } catch (IOException ioe) {
        Log.e("KVOContact", "IOError" + ioe);
    }
    return data;
}

5 个答案:

答案 0 :(得分:8)

您在data区块内声明try。它超出了该区域之外的范围。

可能只是将声明移到try块之前 - 但我个人认为完全删除catch块可能更有意义,并声明该方法可以抛出IOException。您还应关闭FileInputStream块中的InputStreamReaderfinally,以便在抛出异常时不要将它们保持打开状态。

答案 1 :(得分:3)

data变量仅限于try子句的范围。将其声明在try之外。

答案 2 :(得分:1)

您需要对代码进行一些更改:

private String ReadData() {
    String data = null;
    try {
        FileInputStream fis = null;
        InputStreamReader isr = null;        
        fis = KVOContact.this.openFileInput("data.txt");
        isr = new InputStreamReader(fis);
        char[] inputBuffer = new char[fis.available()];
        isr.read(inputBuffer);
        data = new String(inputBuffer);
        isr.close();
        fis.close();
    } catch (IOException ioe) {
        Log.e("KVOContact", "IOError" + ioe);
    }
    return data;
}

你需要声明一个不在try块内的String数据变量,因为否则它不会在try catch块之外被看到。

答案 3 :(得分:1)

是的,您还需要在catch部分中使用return语句,研究以下代码,

private String ReadData() 
{
     try
     {
     .
     .
     . 
     return stringVariable;
     }
     catch ( IOException ioe )
     {
         Log.e("KVOContact", "IOError" + ioe);
         return NULL;
     }
}

答案 4 :(得分:0)

将返回数据语句放在try块本身中。

只有在try块内发生一些错误时才会调用catch,否则try会被执行并且调用将返回到它的来源。