9

运行以下代码时出现未报告的异常

我的代码如下所示

class Super {    
  public Super() throws Exception {    
    System.out.println("Super Class");    
  }    
}

public class Sub extends Super {    
  public static void main(String[] args) throws Exception {    
    Sub s = new Sub();    
  }    
}

得到以下错误: Sub.java:6: unreported exception java.lang.Exception in default constructor
public class Sub extends Super {
1 error

4

4 回答 4

11

您尚未为 Sub 定义默认构造函数,并且 Super 正在报告已检查的异常。要修复它,请将此构造函数添加到 Sub:

public Sub() throws Exception {
    super();
}
于 2013-04-04T13:25:01.560 回答
2

Eclipse 报告以下代码并拒绝编译代码。

默认构造函数无法处理隐式超级构造函数抛出的异常类型异常。必须定义显式构造函数

因此,您必须明确定义一个构造函数。

于 2013-04-04T13:25:22.623 回答
2

所有类的默认构造函数默认调用超类默认构造函数。现在,当您的超类构造函数抛出异常时,当子类构造函数调用超类构造函数时,它需要处理或抛出异常。
现在在你的类中你没有提到任何构造函数,所以编译器将创建一个默认构造函数并调用 super(),因为 super() 抛出异常并且你的构造函数没有抛出/处理任何异常,它将无法编译。

于 2013-04-04T13:27:07.137 回答
2

我同意Jalynn2。另一个解决方案是使 RuntimeException 异常,因为您没有在此构造函数中特别提出任何内容。

class Super {
  public Super() throws RuntimeException {    
    System.out.println("Super Class");    
  }
}
于 2013-04-04T13:28:02.220 回答