2013-06-02 24 views
4

我在JAVA中的相同包中有兩個類。在JAVA中未處理的異常類型

中,我有一個構造一類我試圖例外創建自己:

public class ZooException extends Exception { 

     public ZooException(String error) { 
      super(error); 
     } 
} 

另一類需要在一個點上調用此異常:

public class Zoo<T extends Animal> 

Zoo(int capacity) { 
     if (capacity <= 1) { 
     throw new ZooException("Zoo capacity must be larger than zero"); 
    } 
} 

我這裏要注意兩點

  1. 在ZooException類中,我得到一個警告:「可序列化的類CageException沒有聲明st ATIC型長」
  2. 在動物園類,在該行開頭‘拋出新的最終的serialVersionUID場’,我得到一個編譯錯誤:‘未處理的異常類型CageException’

任何想法什麼我可以在Zoo類中解決這個錯誤嗎?先謝謝你!

+1

使用eclipse?在代碼左側,點擊錯誤符號,eclipse會爲你提供一些修正。如果你選擇一個,它甚至會爲你做。 – jlordo

回答

11

你是在擴展Exception,檢查異常,這意味着它拋出異常的任何方法需要這麼說:

Zoo(int capacity) throws ZooException { 

而且任何代碼調用該構造函數將不得不try {} catch {}或再扔掉它。

如果你不希望它被選中做,使用extends RuntimeException代替

1

關於未經檢查的例外@將P是正確的。

關於serialVersionUID,這意味着 - 因爲Exception是可序列化的 - 如果您隨時決定您的類的以前版本應該與您的較新版本不兼容(通常用於公共API),例如,該類經歷了重大更改,只需更改唯一的ID,然後閱讀舊版本的對象就會拋出異常。

相關問題