2012-06-11 36 views
0

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

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; 
} 

回答

8

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

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

+1

+1为让呼叫者处理异常。 –

+0

好吧...我不明白你的意思是:删除catch块并声明该方法可以抛出IOException ...不?你需要总是捕捉异常? –

+0

'私人字符串读取数据()抛出IOExeption {}'删除'try-catch'块并捕获调用方法中的异常。 – Shaiful

3

data变量被限制在try条款的范围。改为在try之外声明它。

0

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

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

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块外面可以看到。

1

是的,你需要使用return声明扣部分为好,学习下面的代码,

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