通过Class类获取对象详解

通过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类获取对象详解的详细内容,更多请关注其它相关文章!

我是在旅行吗?也许是的。

通过Class类获取对象详解

相关文章:

你感兴趣的文章:

标签云: