您好,登錄后才能下訂單哦!
通過Class對象獲取對象的方式是通過class.newInstance()方式獲取,通過調用默認構造參數實例化一個對象。
/** * Created by hunt on 2017/6/27. * 測試的實體類 * @Data 編譯后會自動生成set、get、無慘構造、equals、canEqual、hashCode、toString方法 */ @Data public class Person { private String name; private int age; }
/** * Created by hunt on 2017/6/27. */ public class NewInstanceTest { public static void main(String[] args) { Class<Person> personClass = Person.class;//獲取Class實例 try { Person p = personClass.newInstance();//通過Class獲得Person實例 p.setAge(28); p.setName("hunt"); System.out.println(p); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
提示:class.newInstance()是通過無參構造函數實例化的,一個對象默認是有一個無參構造函數,如果有一個有參構造函數,無參構造函數就不存在了,在通過反射獲得對象會拋出 java.lang.InstantiationException 異常。
/** * Created by hunt on 2017/6/27. * 測試的實體類 */ public class Person { private String name; private int age; public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public Person(String name,int age){}//有參數構造函數 }
/** * Created by hunt on 2017/6/27. */ public class NewInstanceTest { public static void main(String[] args) { Class<Person> personClass = Person.class;//獲取Class實例 try { Person p = personClass.newInstance();//通過Class獲得Person實例 p.setAge(28); p.setName("hunt"); System.out.println(p.getAge()+"----"+p.getName()); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
總結:以后創建實體類的時候一定要帶上無參構造函數,以便以后使用反射的時候實例化對象不拋出異常。
以上這篇通過Class類獲取對象(實例講解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。