2010-04-14 37 views
0

我正在使用Gson來解析Json。我不明白什麼樣的退貨類型,如果你不趕上Runtime Exception。我期待它是null,但在使用簡單的if語句進行評估時,它不是null如果RunTimeException被拋出並且未被捕獲,則返回類型值

我的代碼看起來是這樣的:

public X x(final String jsonString) { 
    return gson.fromJson(jsonString, X.class); 
} 

然後從另一個函數我調用該函數:

public void y() { 
    final X x = x(); 
    if (x == null) { 
    System.out.println("x == null"); 
    } 
} 

我期待X爲空,但它不是因爲打印聲明不被調用? x的價值是多少?我通過使用x()函數中的catch塊並從catch塊內部返回null來解決我的問題。但我只是想知道功能x()的價值是什麼(如果有?)?我希望我有任何意義。

回答

3

如果x()發生異常,則x變量保持未初始化狀態,因爲控制流被中斷。如果沒有try/catch,異常繼續上升,並且x永遠不可用。通過try/catch,x只在塊內有效,所以如果發生異常,它將不可用。

如果你試圖做這樣的事情:

X x; 
try { 
    x = x(); 
} catch(RuntimeException e) {} 
if (x == null) { 
    ... 

你會得到「變量x可能尚未初始化」的錯誤,因爲控制流可以繞過分配

相關問題