我正在做一個任務,我被告知需要創建一個類(稱爲ClassB),該類必須擴展給定的類(稱爲ClassA)。唯一的問題是,ClassA的構造函數內部的代碼可能會拋出一個異常,所以當我爲ClassB創建我的構造函數時,我試圖圍繞對super()的調用包裝一個try/catch塊,但當然,由於super必須是第一個電話,所以不起作用。調用超級需要try/catch
我該如何解決這個問題?
我正在做一個任務,我被告知需要創建一個類(稱爲ClassB),該類必須擴展給定的類(稱爲ClassA)。唯一的問題是,ClassA的構造函數內部的代碼可能會拋出一個異常,所以當我爲ClassB創建我的構造函數時,我試圖圍繞對super()的調用包裝一個try/catch塊,但當然,由於super必須是第一個電話,所以不起作用。調用超級需要try/catch
我該如何解決這個問題?
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();
}
}
}
當然是正確的,但是不要命名類的大寫版本的關鍵字(儘管它是合法的) – durron597
@ durron597。當然。將編輯它。 –
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
建設嘗試/趕上。客戶端代碼將調用makeClassB()
並且構造函數爲ClassB
將爲private
並拋出。
在您的子類構造函數中添加一個throws子句.. –
@RohitJain它確實有效。但爲什麼?它只適用於構造函數或通常適用於每種方法? – shen