07.08 反射中如何解决java.lang.InstantiationException异常的问题

想利用反射技术实例化对象,但是发现总是跑出如下图的异常:

反射中如何解决java.lang.InstantiationException异常的问题

抛出异常截图

幸好前人已经帮我解释了这到底是什么原因

该解释来自:https://blog.csdn.net/longtingjing/article/details/50554273

意识是:由于在实体类中未添加无参构造函数引起的。

这样问题就很明了了,果不其然,我在相应类中添加了无参构造器,真的没有报错了,下面把代码复制下来,可以直接使用,但是要把相应的包名改成自己的包名就可以运行了!

源代码:

1、对象类

package com.xt.model;

public class Person {

private String name;

private String age;

private String address;

//这是无参构造器,实例化对象时必须用到,

//就应为忘了写这个,才会出现之前的报错!!

public Person() {

}

public Person(String name, String age, String address) {

super();

this.name = name;

this.age = age;

this.address = address;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

}

2、测试类

package com.x.test;

import java.lang.reflect.Field;

public class Test {

public static void main(String[] args) {

try {

Class> cl = Class.forName("com.hs.model.Person");

System.out.println(cl.newInstance());

System.out.println("getName"+cl.getName());

Field[] fiels = cl.getDeclaredFields();

for(Field f:fiels){

System.out.println(f.getName());

}

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

}

运行结果:

反射中如何解决java.lang.InstantiationException异常的问题

运行结果截图

总结:其实这个也不难理解,一般地我们实例化对象时,必须要用到该对象的构造器,否则不能实例化。这里出错的原因是我们往往会容易忘记这个报错是什么意思,从而不知道如何解决,为了保险起见,对于刚入坑的伙伴们每次创建对象时,最好把无参构造器和有参构造区都写上。


分享到:


相關文章: