java demo类_Java反射机制demo(二)—通过Class实例化任意类的对象

Java反射机制demo(二)—通过Class实例化任意类的对象

上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例。

任意一个类,UserInfo,

1 packagecom.aaron.reflect;2

3 public classUserInfo{4 private intuserId;5 privateString name;6 private intage;7

8 public intgetUserId() {9 returnuserId;10 }11 public void setUserId(intuserId) {12 this.userId =userId;13 }14 publicString getName() {15 returnname;16 }17 public voidsetName(String name) {18 this.name =name;19 }20 public intgetAge() {21 returnage;22 }23 public void setAge(intage) {24 this.age =age;25 }26 @Override27 publicString toString() {28 return "UserInfo [userId=" + userId + ", name=" + name + ", age=" + age + "]";29 }30

31 }32

使用newInstance方法,通过调用默认的无参构造来实例化一个UserInfo的对象

1 packagecom.aaron.reflect;2

3 public classDemo1 {4 public static voidmain(String[] args) {5 Class> c = UserInfo.class;//获得Class类实例

6 UserInfo userInfo = null;7

8 try{9 userInfo = (UserInfo) c.newInstance();//通过Class类的实例获得UserInfo的实例

10 } catch(InstantiationException e) {11 e.printStackTrace();12 } catch(IllegalAccessException e) {13 e.printStackTrace();14 }15

16 userInfo.setUserId(1);17 userInfo.setName("Squee,Spleen and Goblin");18 userInfo.setAge(10);19

20 System.out.println(userInfo);21 }22 }23

如果了解Java虚拟机,应该知道,一个对象在new之前,堆里是不会分配内存的。因此这个UserInfo的实例是通过Class的实例得到的。

运行结果:

UserInfo [userId=1, name=Squee,Spleen and Goblin, age=10]

注意事项:

newInstance()调用的是无参的空构造,如果只有参数的构造函数:如下:

private int userId;

private String name;

private int age;

public UserInfo(int userId, String name, int age) {

super();

this.userId = userId;

this.name = name;

this.age = age;

}

运行Demo,抛出异常:

java.lang.InstantiationException: com.aaron.reflect.UserInfo

at java.lang.Class.newInstance(Class.java:359)

at com.aaron.reflect.Demo1.main(Demo1.java:9)

Exception in thread "main" java.lang.NullPointerException

at com.aaron.reflect.Demo1.main(Demo1.java:16

此时,要定义一个空的构造函数(显式地声明一个空的构造函数)。

所以,显式声明空的构造函数有时候也是一种很好的习惯。当你要使用反射时,一定不要忘记空的构造。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值