2013-06-02 25 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,然后阅读旧版本的对象就会抛出异常。

相关问题