通过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