Java 呼叫超级需要尝试/捕获
我正在做一个作业,我被告知我需要创建一个类(称为ClassB),该类必须扩展给定的类(称为ClassA)。唯一的问题是ClassA构造函数内部的代码可能会引发异常,因此当我为ClassB创建构造函数时,我试图在调用super()时包装一个try/catch块,但当然,这不起作用,因为super必须是第一个调用Java 呼叫超级需要尝试/捕获,java,inheritance,exception-handling,Java,Inheritance,Exception Handling,我正在做一个作业,我被告知我需要创建一个类(称为ClassB),该类必须扩展给定的类(称为ClassA)。唯一的问题是ClassA构造函数内部的代码可能会引发异常,因此当我为ClassB创建构造函数时,我试图在调用super()时包装一个try/catch块,但当然,这不起作用,因为super必须是第一个调用 如何解决此问题?您可以在子类构造函数的throws子句中添加异常:- public ClassB extends ClassA { public ClassB() throws M
如何解决此问题?您可以在子类构造函数的throws子句中添加异常:-
public ClassB extends ClassA {
public ClassB() throws MyClassAException {
super();
}
}
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?
}
这将用try/catch来包装
ClassB
的构造。客户端代码将调用makeClassB()
,而ClassB
的构造函数将是private
和throwing。向子类构造函数添加throws子句。@RohitJain它确实有效。但是为什么呢?它只适用于构造函数,或者通常适用于每个方法?当然正确,但不要将类命名为大写的关键字版本(即使它是合法的)