以下是我的代码
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块的方法?
答案 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
语句。