首頁 >Java >java教程 >透過Class類取得物件詳解

透過Class類取得物件詳解

零下一度
零下一度原創
2017-06-28 09:33:191280瀏覽

透過Class物件取得物件的方式是透過class.newInstance()方式獲取,透過呼叫預設建構參數實例化一個物件。

 1 /** 2  * Created by hunt on 2017/6/27.   
 * 测试的实体类 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         }     }
  }

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

以上是透過Class類取得物件詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn