4

我在 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 未声明 long 类型的静态最终 serialVersionUID 字段”
  2. 在 Zoo 类中,在以“throw new”开头的行中,出现编译错误:“Unhandled exception type CageException”

关于我可以做些什么来解决 Zoo 类中的这个错误的任何想法?先感谢您!

4

3 回答 3

11

您正在扩展Exception一个已检查的异常,这意味着任何抛出该异常的方法都需要这样说:

Zoo(int capacity) throws ZooException {

任何调用该构造函数的代码都必须try {} catch {}再次抛出它。

如果您不想检查它,请extends RuntimeException改用

于 2013-06-02T17:25:13.330 回答
1

关于未经检查的异常@Will P是对的。

关于 serialVersionUID,这意味着 - 因为 Exception 是 Serializable - 如果您随时决定您的类的先前版本应该与您的新版本不兼容(通常用于公共 API),例如,该类经历了重大更改,只需更改唯一的id,读取旧版本的对象会抛出异常。

于 2013-06-03T02:58:08.860 回答
0
Zoo(int capacity) throws ZooException {
    if (capacity <= 1) {
    throw new ZooException("Zoo capacity must be larger than zero");
}

您必须声明已检查异常或使用 try-catch 块处理它们。尝试阅读异常: http ://docs.oracle.com/javase/tutorial/essential/exceptions/

于 2013-06-02T17:25:43.570 回答