JAVA中未处理的异常类型

时间:2013-06-02 17:22:36

标签: java exception exception-handling unhandled-exception

我在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”开头的行,我得到一个编译错误:“未处理的异常类型CageException”
  3. 关于我可以做什么来解决Zoo类中的这个错误的想法?提前谢谢!

3 个答案:

答案 0 :(得分:11)

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

Zoo(int capacity) throws ZooException {

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

如果您不希望选中它,请改用extends RuntimeException

答案 1 :(得分:1)

关于未经检查的例外 @Will P 是对的。

关于serialVersionUID,这意味着 - 因为异常是可序列化的 - 如果您随时确定您的类的先前版本应该与您的新版本(通常用于公共API)不兼容,例如,该类已经发生了重大变化,只需更改唯一ID,读取旧版本的对象会引发异常。

答案 2 :(得分: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/