我正在做一个作业,我被告知我需要创建一个必须扩展给定类(称为 ClassA)的类(称为 ClassB)。唯一的问题是 ClassA 的构造函数内部的代码可能会抛出异常,所以当我为 ClassB 创建构造函数时,我试图在对 super() 的调用周围包装一个 try/catch 块,但当然,那不起作用,因为 super 必须是第一个电话。
我该如何解决这个问题?
我正在做一个作业,我被告知我需要创建一个必须扩展给定类(称为 ClassA)的类(称为 ClassB)。唯一的问题是 ClassA 的构造函数内部的代码可能会抛出异常,所以当我为 ClassB 创建构造函数时,我试图在对 super() 的调用周围包装一个 try/catch 块,但当然,那不起作用,因为 super 必须是第一个电话。
我该如何解决这个问题?
public ClassB extends ClassA {
public ClassB() throws MyClassAException {
super();
}
}
您可以在子类构造函数的 throws 子句中添加异常:-
class ClassA {
ClassA() throws Exception {
}
}
public class Demo extends ClassA {
Demo() throws Exception {
super();
}
public static void main(String[] args) {
try {
Demo d = new Demo(); // Handle exception here.
} catch (Exception e) {
e.printStackTrace();
}
}
}
ClassB
应该有一个静态方法
public static ClassB makeClassB() {
try {
return new ClassB();
}
catch(Exception exc) {
// whatever logic you are currently performing to swallow
// presumably you have some default ClassB to return as part of this logic?
}
这将ClassB
用 try/catch 包装结构。客户端代码将调用makeClassB()
并且构造函数ClassB
将被private
抛出。