在Java中,InstantiationException
是一個檢查型異常(checked exception),它通常發(fā)生在試圖實例化一個類時,但該類或其無參構(gòu)造函數(shù)存在某些問題。以下是一些可能導致 InstantiationException
的表現(xiàn)形式:
InstantiationException
。class MyClass {
public MyClass() {
// 非默認構(gòu)造函數(shù)
}
}
public class Main {
public static void main(String[] args) {
try {
MyClass obj = new MyClass(); // 這里會拋出 InstantiationException
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
InstantiationException
。abstract class MyAbstractClass {
public abstract void myMethod(); // 抽象方法
}
public class Main {
public static void main(String[] args) {
try {
MyAbstractClass obj = new MyAbstractClass(); // 這里會拋出 InstantiationException
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
InstantiationException
。class MyClass {
public MyClass() {
// 構(gòu)造函數(shù)
}
}
// 在另一個包中
public class Main {
public static void main(String[] args) {
try {
MyClass obj = new MyClass(); // 這里會拋出 InstantiationException,因為 MyClass 是包私有的
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
注意:在上面的例子中,MyClass
實際上并不是包私有的,我在這里的表述有誤。正確的例子應該是類被聲明為 private
,這樣它就無法從其他類中被訪問和實例化。
InstantiationException
。class OuterClass {
class InnerClass {
// ...
}
}
public class Main {
public static void main(String[] args) {
try {
OuterClass.InnerClass obj = new OuterClass.InnerClass(); // 這里會拋出 InstantiationException
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
在這個例子中,你應該同時實例化 OuterClass
和其內(nèi)部類 InnerClass
,如下所示:
OuterClass outer = new OuterClass();
OuterClass.InnerClass obj = outer.new InnerClass();