【问题标题】:Java return type after try/catch尝试/捕获后的 Java 返回类型
【发布时间】:2012-06-14 05:00:10
【问题描述】:

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

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

【问题讨论】:

    标签: java android return try-catch


    【解决方案1】:

    data 变量仅限于try 子句的范围。改为在try 之外声明它。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 好的...我不明白你的意思:删除catch块并声明该方法可以抛出IOException...不要?您需要始终捕获异常吗?
      • private String ReadData() throws IOExeption{ } 删除 try-catch 块并在调用者方法中捕获异常。
      • @DennisvandenBrom:不,您不需要捕获异常 - 您可以声明该方法可能会抛出它,它只会冒泡。请参阅docs.oracle.com/javase/tutorial/essential/exceptions 了解更多信息。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        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块之外是看不到的。

        【讨论】:

          【解决方案5】:

          是的,你还需要在catch部分使用return语句,学习下面的代码,

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-08-14
            • 2016-05-02
            • 2021-05-20
            • 1970-01-01
            • 2019-04-14
            • 1970-01-01
            • 1970-01-01
            • 2017-09-12
            相关资源
            最近更新 更多