2014-04-04 48 views
-2

輸出即將通過測試!如何建設者返回時,它被設置爲null在finally塊程序的輸出是什麼?

public class Test { 
    public static void main(String args[]) 
    { 
     System.out.println(new Test().print()); 
    } 
    protected StringBuilder print() { 
     StringBuilder builder = new StringBuilder(); 
     try { 
      builder.append("Test "); 
      return builder.append("Passed!!!"); 
     } finally { 
      builder = null; 
     } 
    } 
} 
+0

是的,無論是否存在異常,最後都會執行。也許你在混淆catch catch – demongolem

+1

你問這個就像7個小時前....這裏已經回答了 –

回答

0

因爲return的結果是builder的那一刻引用的副本。

builder = null; in finally代碼不會更改此引用,而只是替換print方法中的builder變量的當前值。

不過,請注意,如果您更改返回的對象引用的狀態,則會影響返回值的結果。例如:

protected StringBuilder print() { 
    StringBuilder builder = new StringBuilder(); 
    try { 
     builder.append("Test "); 
     return builder.append("Passed!!!"); 
    } finally { 
     builder.append(" but modified!"); 
     //builder = null; 
    } 
} 

它會打印:

Test Passed!!! but modified! 
0

finally一切之後會發生。這意味着構建器將在返回後設置爲null(但當然,在調用者獲得結果之前)。

請注意,在這種情況下,nulling構建器沒有多大意義,因爲構建器變量即將失去範圍,將垃圾收集在某些時候反正清理。

0

基本上你返回的StringBuilder的內容,然後將其設置爲null。

0

finally是產生要麼execption try塊或not.Here後執行是link供你參考Java文檔。