作者:你好2502898737 | 来源:互联网 | 2024-10-09 05:36
通过Class对象获取对象的方式是通过class.newInstance()方式获取,通过调用默认构造参数实例化一个对象。1**2*Createdbyhunton201762
通过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 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 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 }
总结:以后创建实体类的时候一定要带上无参构造函数,以便以后使用反射的时候实例化对象不抛出异常。