在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
。