2017-06-14 63 views
0

之間的關係有很多關於java-7功能「精確重新拋出」和final Exception ex的問題,我無法找到明確的答案爲我的問題。「精確重新拋出」和最終異常

「精確重投」與final Exception之間的關係是什麼?

public static void main(String args[]) throws OpenException, CloseException { 
    boolean flag = true; 
    try { 
     if (flag){ 
      throw new OpenException(); 
     } 
     else { 
      throw new CloseException(); 
     } 
    } 
    catch (final Exception e) { 
     System.out.println(e.getMessage()); 
     throw e; 
    } 
} 

是強制性使用final關鍵字,如果我想使用「精確重新拋出」?

catch (final Exception e) { 
    System.out.println(e.getMessage()); 
    throw e; 
} 

,如果它不是強制性的我可以重新分配ex提到一個新的異常?

catch (Exception e) { 
    System.out.println(e.getMessage()); 
    e=new AnotherException(); 
    throw e; 
} 

回答

2

不要求申報異常的參數(e在你的例子)作爲final得到精確的重新拋出的語義。如果參數有效最終,您也可以得到精確的重新拋出。

在第二個示例中,該參數不是有效的最終結果,因此您無法獲得精確的重新拋出語義。

(這甚至適用於如果您分配給e異常的分配與在try塊拋出的原始異常兼容)。

參考:JLS 11.2.2

+0

「有效最終」是什麼意思? –

+0

這意味着什麼都沒有分配給它。閱讀我鏈接到的參考! –