2013-03-13 16 views
2

我有一個小型項目和很多類。我創建了一個領域例外,這是行不通的數組中的對象的例外

public C(..., int yearX, ...) throws InitException { 
     if (year == 2000) { 
      ... 
      year = yearX; 
      ... 
     } else 
      throw new InitAnneeEC(); 
    } 
+0

可能會更容易一些,如果是英文的。 。但你也應該使代碼更小,即縮小問題的範圍 – Coffee 2013-03-13 02:17:05

+0

我認爲你不瞭解例外的目的。如果在方法或構造函數中拋出異常,則該方法或構造函數立即退出。如果它是一個構造函數,則對象構造失敗,就好像該對象從未創建過一樣。在我看來,這就是你所抱怨的 - 但實際上,這正是它應該工作的方式,事實上,這是從構造函數中拋出異常的唯一原因:如果你想取消創建的對象。 – 2013-03-13 02:18:51

+0

當從對象的構造函數中拋出異常時,預計它不會被初始化。你想要發生什麼? – 2013-03-13 02:20:59

回答

2

你的問題是在構造函數你比較year但你不設置它的價值首先,這樣的例外總是發生。

public C(..., int yearX, ...) throws InitException { 
     if (year == 2000) { 
      ... 
      year = yearX; 
      ... 
     } else 
      throw new InitAnneeEC(); 
    } 

當你在做if (year == 2000)實際上它是使用默認值:0,因此比較始終爲false。 我想你想設置anneeEC值與anneeE值。

嘗試改變你這樣的代碼:

public C(..., int yearX, ...) throws InitException { 
     year = yearX; 
     if (year == 2008) { 
      ... 
     } else 
      throw new InitException(); 
    }