Java java.lang.InstantiationException异常案例详解
什么是 java.lang.InstantiationException 异常?
java.lang.InstantiationException
是 Java 异常类的一种,通常是由于实例化一个抽象类或没有公共构造方法的类而导致的。当一个类被实例化时,Java 实际上会尝试调用该类的无参构造方法。如果该类没有提供公共的无参构造方法,或者是抽象类,则实例化该类时会抛出 InstantiationException
异常。
java.lang.InstantiationException 异常的解决方法
要解决 java.lang.InstantiationException
异常,我们需要确保我们正在实例化的类具有公共的无参构造方法。
以下是两个示例说明 java.lang.InstantiationException
异常的情况以及解决方法:
示例 1:
abstract class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
class Student extends Person {
String major;
public Student(String name, int age, String major) {
super(name, age);
this.major = major;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("John", 30);
System.out.println(person.name + " is " + person.age + " years old.");
Student student = new Student("Alice", 20, "Computer Science");
System.out.println(student.name + " is " + student.age + " years old and majors in " + student.major + ".");
}
}
上面代码中,Person
类为抽象类,不提供无参构造方法。在 Main
类中,当实例化 Person
类时,会抛出 java.lang.InstantiationException
异常。
为了解决这个问题,我们需要向 Person
类中添加一个公共的无参构造方法:
abstract class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
}
class Student extends Person {
String major;
public Student(String name, int age, String major) {
super(name, age);
this.major = major;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("John", 30);
System.out.println(person.name + " is " + person.age + " years old.");
Student student = new Student("Alice", 20, "Computer Science");
System.out.println(student.name + " is " + student.age + " years old and majors in " + student.major + ".");
}
}
在上面的代码中,我们向 Person
类中添加了一个公共的无参构造方法,这样就能够成功实例化 Person
类。
示例 2:
class Person {
String name;
int age;
private Person(String name, int age) {
this.name = name;
this.age = age;
}
public static Person createPerson(String name, int age) {
return new Person(name, age);
}
}
public class Main {
public static void main(String[] args) {
Person person = Person.createPerson("John", 30);
System.out.println(person.name + " is " + person.age + " years old.");
}
}
在上面的代码中,我们为 Person
类的构造函数设置为私有,然后添加了一个公共的静态方法 createPerson
用于创建 Person
对象。
在实例化 Person
类时,由于我们无法直接访问 Person
构造函数,所以会抛出 java.lang.InstantiationException
异常。
要解决这个问题,我们需要在 Person
类中添加一个公共的无参构造方法,并把私有的构造函数修改为默认的构造函数:
class Person {
String name;
int age;
Person() {
}
private Person(String name, int age) {
this.name = name;
this.age = age;
}
public static Person createPerson(String name, int age) {
return new Person(name, age);
}
}
public class Main {
public static void main(String[] args) {
Person person = Person.createPerson("John", 30);
System.out.println(person.name + " is " + person.age + " years old.");
}
}
在上面的代码中,我们向 Person
类中添加了一个公共的无参构造方法,这样就能够成功实例化 Person
类。同时,我们将私有的构造函数修改为默认的构造函数。这样就能够保证能够正常地创建 Person
对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java java.lang.InstantiationException异常案例详解 - Python技术站