Java 反射机制浅析

http://www.cnblogs.com/gulvzhe/archive/2012/01/27/2330001.html

 

反射的三步:

 1、获得你想操作类的Class对象


 2、通过第一步获得的Class对象去取得操作类的方法或是属性名


 3、操作第二步取得的方法或是属性, 执行指定对象的方法(如果方法是静态方法,则不需要指定对象),取得属性值或为属性赋值

 

注意问题:

1、Method method = cla.getMethod("addUser", String.class);   //getMethod方法中的参数,第一个参数是方法名, 后面的参数个数是可变的, 是指addUser方法中参数的类型

 

2、method.invoke(user, "张三"); //invoke方法中的第一个参数是指定的对象, 如果method是静态方法, 则第一个参数为null, 第二个参数是执行此方法需要传递的参数

 

3、在给对象中的成员变量赋值时, 如果该成员变量是private 时, 则会报Class  can not access a member of class User with modifiers "private"

出现这样的问题, 是因为是成员变量是私有的,

解决方法:

field.setAccessible(true); //则指示反射的对象在使用时应该取消 Java 语言访问检查

 

4、在获得类的方法、属性、构造函数时,会有getXXX和getgetDeclaredXXX两种对应的方法。之间的区别在于前者返回的是访问权限为public的方法和属性,包括父类中的;但后者返回的是所有访问权限的方法和属性,不包括父类的。

 

5、获取类中的getter, setter方法

BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
PropertyDescriptor[] propertyDescriptors =  beanInfo.getPropertyDescriptors();
System.out.println("--------------");
for(int i=0;i<propertyDescriptors.length;i++){
    System.out.println(propertyDescriptors[i].getWriteMethod());
    System.out.println(propertyDescriptors[i].getReadMethod());

}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值