2016-03-02 20 views
-1

是我的代碼在try catch塊中返回的更好用法是什麼?所以下面

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

我想知道如果把return stringBuffer.toString();只是try塊結束前和結束時返回空StringBuffer的是在整個方法的更好的結局,或者如果return stringBuffer.toString();會更好。

即使我在整個方法的末尾放了stringBuffer.toString();,我仍然認爲如果在簡單代碼的情況下構造了stringBuffer之前發生了一些錯誤,它可能仍會返回null。這兩個職位有什麼優點或缺點?什麼是返回try catch塊最「正統」的方法?

+1

因爲如果在塊中引發錯誤,該方法將返回一個空字符串,而不是'null' – Michael

+1

您的方法不會返回null,因爲在構造'StringBuffer'之前沒有任何東西可能出錯。如果發生錯誤,你將返回一個空字符串,這真的是你想要做的嗎? – tddmonkey

+0

啊是的,這是我的壞我不是故意說空,而是說空 – Jchoi

回答

0

在這種特殊情況下,由於在try/catch塊之前創建了StringBuffer,因此不會有任何影響。因此,最後一條語句將返回從URL中收到的空字符串或數據。

但是,假設如果我們修改報表:

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

在這種情況下,return語句不能放在最後,因爲它是容易NullPointerException。因此,try和catch塊將有兩個不同的返回語句。

在try/catch塊中使用return沒有這樣的正統。它完全取決於你的算法。在某些情況下,您可能還需要從try塊返回。假設您的API返回int作爲錯誤代碼,因此try塊中的不同條件可能需要不同的錯誤代碼。

在這種情況下,您不能在最後一次返回一個變量(比如int errorCode,它存儲了不同條件的錯誤值),因爲您需要在錯誤時中斷代碼。在Java中,break將不適用於try塊,因此return聲明必須在try之內使用。

+0

非常感謝。所以一般情況下,除非我需要try塊內的各種返回條件,或者如果我的變量已經被存儲爲null,它不會太重要。 – Jchoi

+0

是的。 它也可能是單一返回語句,如果return語句由於某種原因不是try語句的最後一個語句。 –