在Java中,InstantiationException
是一個運行時異常,它發生在試圖通過 new
關鍵字實例化一個類時,但該類或其任何父類都包含一個無參構造函數且該構造函數是私有的(private)。
下面是一個簡單的例子來說明 InstantiationException
的情況:
class MyClass {
// 私有無參構造函數
private MyClass() {
System.out.println("MyClass 的私有構造函數被調用");
}
}
public class Main {
public static void main(String[] args) {
try {
// 嘗試實例化 MyClass,這將拋出 InstantiationException
MyClass obj = new MyClass();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
在這個例子中,MyClass
類有一個私有的無參構造函數。當我們嘗試使用 new MyClass()
實例化 MyClass
時,Java 無法調用該私有構造函數,因此拋出了 InstantiationException
。
注意:如果你嘗試實例化的類或其父類包含一個公共(public)的無參構造函數,那么就不會拋出 InstantiationException
。例如:
class MyClass {
// 公共無參構造函數
public MyClass() {
System.out.println("MyClass 的公共構造函數被調用");
}
}
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass(); // 這里不會拋出 InstantiationException
}
}
在這個修改后的例子中,MyClass
有一個公共的無參構造函數,所以我們可以成功地實例化它,而不會遇到 InstantiationException
。