`
wanxiaotao12
  • 浏览: 456271 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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());

}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics