通過Class類獲取對象實例


通過Class對象獲取對象的方式是通過class.newInstance()方式獲取,通過調用默認構造參數實例化一個對象。

 1 /**
 2  * Created by hunt on 2017/6/27.
 3  * 測試的實體類
 4  * @Data 編譯后會自動生成set、get、無慘構造、equals、canEqual、hashCode、toString方法
 5  */
 6 @Data
 7 public class Person {
 8     private String name;
 9     private int age;
10 }

 

 1 /**
 2  * Created by hunt on 2017/6/27.
 3  */
 4 public class NewInstanceTest {
 5     public static void main(String[] args) {
 6         Class<Person> personClass = Person.class;//獲取Class實例
 7         try {
 8             Person p = personClass.newInstance();//通過Class獲得Person實例
 9             p.setAge(28);
10             p.setName("hunt");
11             System.out.println(p);
12         } catch (InstantiationException e) {
13             e.printStackTrace();
14         } catch (IllegalAccessException e) {
15             e.printStackTrace();
16         }
17     }
18 }

提示:class.newInstance()是通過無參構造函數實例化的,一個對象默認是有一個無參構造函數,如果有一個有參構造函數,無參構造函數就不存在了,在通過反射獲得對象會拋出 java.lang.InstantiationException 異常。

 1 /**
 2  * Created by hunt on 2017/6/27.
 3  * 測試的實體類
 4  */
 5 
 6 public class Person {
 7     private String name;
 8     private int age;
 9 
10     public String getName() {
11         return name;
12     }
13 
14     public int getAge() {
15         return age;
16     }
17 
18     public void setName(String name) {
19         this.name = name;
20     }
21 
22     public void setAge(int age) {
23         this.age = age;
24     }
25 
26     public Person(String name,int age){}//有參數構造函數
27 }
 1 /**
 2  * Created by hunt on 2017/6/27.
 3  */
 4 public class NewInstanceTest {
 5     public static void main(String[] args) {
 6         Class<Person> personClass = Person.class;//獲取Class實例
 7         try {
 8             Person p = personClass.newInstance();//通過Class獲得Person實例
 9             p.setAge(28);
10             p.setName("hunt");
11             System.out.println(p.getAge()+"----"+p.getName());
12         } catch (InstantiationException e) {
13             e.printStackTrace();
14         } catch (IllegalAccessException e) {
15             e.printStackTrace();
16         }
17     }
18 }

總結:以后創建實體類的時候一定要帶上無參構造函數,以便以后使用反射的時候實例化對象不拋出異常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM