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異常的問題

運行結果截圖

總結:其實這個也不難理解,一般地我們實例化對象時,必須要用到該對象的構造器,否則不能實例化。這裡出錯的原因是我們往往會容易忘記這個報錯是什麼意思,從而不知道如何解決,為了保險起見,對於剛入坑的夥伴們每次創建對象時,最好把無參構造器和有參構造區都寫上。


分享到:


相關文章: