2013-07-10 19 views
0

我是一個java新手,通過一些培訓材料,這是其中一個問題。try-catch在java中設置日期值有什麼用?

提供有效的DateFormat對象df和

Date d = new Date(0L); 
String ds = "December 12, 2012"; 
//Insert correct code here 

哪些更新D's的日期值由DS代表?

A. d = df.parse(ds); 
B. d = df.getDate(ds); 
C. try{ 
     d = df.parse(ds); 
     } 
    catch(ParseException e){ }; 

正確答案是C.爲什麼這樣呢? A和C有什麼區別?

+3

使用其他培訓材料。必須不惜一切代價避免標記正確的答案,即吞噬例外。 –

+1

@JBNizet最後你是否抓到了這個分號?我的意思是,真的:) –

+0

@JBNizet:我會的,但這是包含OCJP考試最可能的問題。我知道這是蹩腳的,但我需要在fasttrack上學習java。 (我是COBOL開發者)。 – mankand007

回答

2

因爲parse()可以拋出一個ParseException,這是一個檢查異常。檢查異常必須由調用代碼使用try-catch塊處理或您的代碼必須聲明它能夠拋出異常,用throws子句。

經過例外是例外的Java的設計者覺得你的程序絕對必須提供,這種或那種方式。通過把該語句的異常的catch塊try語句中

  1. 捕獲異常:當你的代碼可以拋出檢查異常的聲明,你的程序必須做兩件事情之一。

  2. 指定在包含聲明,以表明你的方法不希望處理異常的方法的throws子句,所以它的傳球例外起來就行了。

更好的代碼將是:

try{ 
    d = df.parse(ds); 
    } 
catch(ParseException e){ 
    e.printStackTrace(); 
    // log the exception 
    throw new RuntimeException(e); 
} 

Read this for more on Checked Exceptions

+1

不,這也是錯誤的代碼,因爲在try-catch之後,'d'可能沒有被初始化。在大多數情況下,真正正確的事情是讓異常傳播。另一個稱爲*檢查異常*的錯誤特徵。 –

+0

雅,如果有效的初始化'd'是我的代碼其餘部分的關鍵,那麼我會做的,如果嚴重的編碼。這個代碼只是一個虛擬的。 – NINCOMPOOP

+0

如果你有一個'拋出新的RuntimeException(e)'而不是打印堆棧跟蹤 - 人們搜索的答案往往不會讀取第一個工作代碼片段... –

1

parse方法拋出一個檢查異常,ParseException(它不是RuntimeException),所以它必須被捕獲,否則它是一個編譯器錯誤。

1

如果有問題的代碼,發現自己:

  1. 在不宣佈任何try-catch塊這將趕上它的檢查ParseException
  2. 以外的方法,

然後一會給出一個編譯器錯誤:Uncaught exception ParseException: must be caught or declared to be thrown

但是,如果你從字面上使用C下的代碼替換//Insert correct code here,並嘗試實際後讀變量d,你會得到錯誤local variable may not have been initialized

且不說空的catch塊,和之後的搞笑分號...

總之,這是你一起工作很糟糕材料。

+0

那不是一個單詞8> ) – arcy

相關問題