try catch块中返回的更好用法是什么?

时间:2016-03-02 16:53:39

标签: java return

以下是我的代码

private String downloadContents (String urlPath){
    StringBuffer stringBuffer = new StringBuffer();

        try {
            URL url = new URL (urlPath);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            int response = connection.getResponseCode();
            Log.d("DownloadData", "Response code was " + response);
            InputStream is = connection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);

            int numChar;
            char[] readBuffer = new char [500];

            while (true){
                numChar = isr.read(readBuffer);
                if (numChar <= 0){
                    break;
                }
                stringBuffer.append(readBuffer);
            }

        }
        catch (Exception e) {
            e.printStackTrace();
        }

        return stringBuffer.toString();
    }
}

我想知道在try块结束之前放置return stringBuffer.toString();并在结尾处返回空stringBuffer更好,或者如果整个方法结束时return stringBuffer.toString();会更好。

我想即使我把stringBuffer.toString();放在整个方法的末尾,如果在构造stringBuffer之前发生了一些错误,它可能仍然会返回null码。这两个职位会有任何优点或缺点吗?什么是最正常的&#34;正统的&#34;返回try catch块的方法?

1 个答案:

答案 0 :(得分:0)

在这种特殊情况下,在try / catch块之前创建StringBuffer时不会有任何影响。因此,last语句将返回空字符串或从URL接收的数据。

但是,假设我们将语句修改为:

StringBuffer stringBuffer = null;
try {
    stringbuffer = new StringBuffer();
    //...
}catch(Exception e){
    //...
}
return stringBuffer.toString();

在这种情况下,return语句不能放在最后,因为它容易NullPointerException。因此,try和catch块将有两个不同的return语句。

在try / catch块中使用return没有这样的正统。这完全取决于你的算法。在某些情况下,您可能还需要从try块返回。假设您的API返回int作为错误代码,因此try块中的不同条件可能需要不同的错误代码。

在这种情况下,您不能在最后一个中返回一个变量(比如说int errorCode存储不同条件的错误值),因为您需要在出错时中断代码。在Java中,break无法在try块上运行,因此必须在return中使用try语句。