Java 为什么默认构造函数不能处理异常类型异常?
我想知道为什么我必须定义一个显式构造函数,因为我得到了一个错误,即默认构造函数不能处理隐式超级构造函数引发的异常类型异常Java 为什么默认构造函数不能处理异常类型异常?,java,exception,inheritance,constructor,Java,Exception,Inheritance,Constructor,我想知道为什么我必须定义一个显式构造函数,因为我得到了一个错误,即默认构造函数不能处理隐式超级构造函数引发的异常类型异常 class A { A() throws Exception { System.out.println("A Class"); } } public class Example extends A { public static void main(String args[]) throws Exception { E
class A {
A() throws Exception {
System.out.println("A Class");
}
}
public class Example extends A {
public static void main(String args[]) throws Exception {
Example t = new Example();
}
}
是-您的
示例
类有效地声明:
public Example() {
super();
}
这将不会编译,因为super()
调用正在调用A()
构造函数,该构造函数被声明为抛出Exception
,这是一个选中的异常。这在构造函数中是一个错误,就像调用一个方法,该方法声明它从一个既不捕获异常也不声明它自己抛出异常的方法中抛出一个已检查异常一样
因此,您需要在示例
中显式声明的构造函数中声明异常
public Example() throws Exception {
super(); // This is implicit; you can remove it if you want.
}
相反。请注意,这仅在构造函数引发选中异常时才相关。。。未检查的异常不需要声明,因此“编译器提供的”默认异常可以
还请注意,您无法捕获超级构造函数引发的异常。您必须使用
throws
子句向示例类添加显式构造函数
class A {
A() throws Exception {
System.out.println("A Class");
}
}
public class Example extends A {
public static void main(String args[]) throws Exception {
Example t = new Example();
}
}
public Example() throws Exception {
}
你的问题是什么?@JonK显然是“为什么我必须定义一个显式构造函数?我在没有定义构造函数的情况下遇到了这些错误”。@fuzzxl自我发表评论以来,似乎有一个问题被编辑过——最初是一条错误消息和一个代码转储。