java中自定义Person类,并给定一个带参构造, 当Person类的反射对象调用newInstance时会报什么错
时间: 2024-02-06 20:08:49 浏览: 71
java反射机制介绍及使用
如果Person类的带参构造方法没有默认的无参构造方法,那么在调用反射对象的newInstance方法时会报InstantiationException异常。这是因为newInstance方法会尝试调用类的默认无参构造方法来创建该类的实例,如果该类没有默认无参构造方法,就无法创建实例。你可以通过在Person类中添加一个默认无参构造方法来避免这个问题。代码示例:
```java
public class Person {
private String name;
private int age;
public Person() {
// 默认无参构造方法
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 其他方法和属性省略
}
```
如果没有在Person类中添加默认无参构造方法,可以使用getDeclaredConstructor方法获取Person类的带参构造方法,并通过该构造方法创建实例。代码示例:
```java
public static void main(String[] args) throws Exception {
Class<Person> clazz = Person.class;
Constructor<Person> constructor = clazz.getDeclaredConstructor(String.class, int.class);
Person person = constructor.newInstance("Tom", 20);
System.out.println(person.getName() + " " + person.getAge());
}
```
注意,getDeclaredConstructor方法获取的是类的构造方法,包括私有构造方法,但是需要通过setAccessible(true)设置为可访问才能够调用。
阅读全文