Reflection反射

1.反射基本概念

正射-实例化

Apple apple=new Apple();//直接初始化,[正射]
apple.setPrice(4);

反射就是在运行时才知道要操作的类时什么,并且可以在运行时获取类的完整构造,并调用对应的方法

class clz=class.forName("cn.webrx.Apple");
Method method=clz.getMethod("setPrice",int.class);
Construtor constructor=clz.getConstructor();
Object object=constructor.newInstance();//相当于new Apple();
method.invoke(object,4);//相当于apple.setPrice(4)

java.lang.reflect包

java.lang.reflect包提供了反射中用到的类,主要的类说明如下:

Constructor类:提供类的构造方法信息。

Field类:提供类或接口中成员变量信息。

Method类:提供类或接口成员方法信息。

Array类:提供了动态创建和访问Java数组的方法

Modifier类:提供类和成员访问修饰符信息。

通过反射创建类对象

通过反射创建类对象主要有两种方式:通过Class对象的newInstance()方法,通过Constructor对象的newInstance()方法。

第一种通过Class对象的newInstance()方法。

Class clz=Apple.class;
Apple apple=(Apple)clz.newInstance();

第二种;通过Constructor 对象的newInstance()方法

Class clz=Apple.class;
Constructor constructor=clz.getConstructor();
Apple apple=(Apple)constructor.newInstance();

通过Constructor对象创建类对象可以选择特定构造方法,而通过Class对象则只能使用默认的无参数构造方法。下面的代码就调用了一个有参数的构造方法进行了类对象的初始化。

Class clz=Apple.class;
Constructor constructor =clz.getConstructor(String.class,int,class);
Apple apple=(Apple)constructor.newInstance("红富士",15)

通过反射获取类属性、方法、构造器

我们通过Class对象的getFields()方法可以获取Class类的属性,但无法获取私有属性。

Class clz =Apple.class;
Field[] fields=clx.getFields();
for(Field field:fields){
 System.out.println(field.getName());
}
//输出结果:price

如果使用Class对象的getDeclardFields()方法则可以获取包括私有属性在内的所有属性:

Class clz=Apple.class;
Field[] fields=clz.getDeclareFields();
for(Field field:fields){
System.out.println(field.getName());
}
​
//输出结果:name
       //price
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值