java.lang.reflect包

Constructor、Field、Method的父类是AccessibleObject;


一、获得Class对象

Class<?> c = Class.forName("classname");   抛出ClassNotFoundException

二、获得实现接口

Class<?> inters[] = c.getInterfaces();
for(int i=0;i<inters.length;i++){
    System.out.print(inters[i].getName()+" ");        //getName()方法为取得接口名称;
}

三、获得父类

Class<?> superClass  = c.getSuperclass();     //获得父类
String name  = superClass.getName();    //获得父类名称


四、取得构造方法

Constructor cons[] = c.getConstructors();         //获得公开的构造方法
Constructor dcons[] = c.getDeclaredConstructors();        //获得全部构造方法
String modifier = Modifier.toString(cons[i].getModifiers());   //获得访问权限
String name = cons[i].getName();            //获得构造方法名称
Class<?> params[] = cons[i].getParameterTypes();        //获得参数类型对象

五、获得Method

Method ms[] = c.getMethods();                        //返回公共的全部方法,包括继承方法
Method dms[] = c.getDeclaredMethods();        //返回本类全部方法,不包括继承的方法
Class<?> rt = ms[i].getReturnType();
Class<?>params[] = ms[i].getParameterTypes();
String name = ms[i].getName();
String modifier = Modifier.toString(ms[i].getModifiers());
Class<?>ex[] = ms[i].getExceptionTypes();        //获得异常
String name = ex[i].getName();            //获得异常名称

六、获得Field

Field fs[] = c.getFields();                    //获得公共属性,包括继承属性
Field dfs[] = c.getDeclaredFields();    // 获得本类全部属性
Class<?> type = fs[i].getType();        //获得属性的类型对象
String name = fs[i].getName();        //获得属性的名称
String modifier = Modifier.toString(fs[i].getModifiers());

七、通过反射创建一个对象

Class<?> c = Class.forName("Person");
Person p = (Person)c.newInstance();

八、Constructor创建对象

Class c = Class.forName("Person");
 Constructor<?> cons[] = c.getConstructors();
 Person p = (Person)cons[0].newInstance("xiazdong",15);

九、调用特定方法

Method m = c1.getMethod("funcname",Class<?>...c);   //funcname表示调用方法的名称,c表示参数的Class对象
例如:Method m = c1.getMethod("fun",String.class,int.class);    表示调用fun(String,int);函数
m.invoke(c1.newInstance(),"xiazdong",20);   //如果有返回值,则invoke函数返回;


十、调用特定属性

Field f = c1.getDeclaredField("name");    //返回name属性
f.setAccessible(true);    //私有属性可见
f.get(Object obj);   //返回obj对象的name属性的值
f.set(Object obj,String n);      //设置obj对象的name属性为n值;

十一、操作数组

int tmp[] = {1,2,3};
Class<?> c  = tmp.getClass().getComponentType();
Array.getLength(tmp);        //tmp数组的长度
c.getName();           //获得数组类型名称
Array.get(Object obj,int index);      //获得obj数组的index索引的数值
Array.set(Object obj,int index,VALUE);    //设置obj数组的index索引的数值为value;
Object obj  = Array.newInstance(c,length);          //c为数组的类型,length为数组的长度;obj为返回的数组对象;


示例:

    1. import
    2. public class
    3. public static void main(String args[])throws
    4. "Person");  
    5. "sayHello");  
    6.         m.invoke(c1.newInstance());  
    7. "sayHello2",String.class,int.class);  
    8. "xiazdong",123);  
    9.         System.out.println(str);  
    10. "name");  
    11. "age");  
    12. true);  
    13. true);  
    14.         Person obj = (Person)c1.newInstance();  
    15. "xzdong");  
    16. 12);  
    17.         System.out.println(nameField.get(obj));  
    18.         System.out.println(ageField.get(obj));  
    19. "setName",String.class);  
    20. "changed");  
    21. "getName");  
    22.         System.out.println(getName.invoke(obj));  
    23.   
    24. int tmp[] = {1,2,3};  
    25.         Class<?> c3 = tmp.getClass().getComponentType();  
    26.         System.out.println(c3.getName());  
    27. "第一个数:"+Array.get(tmp,0));  
    28. 0,5);  
    29. "第一个数:"+Array.get(tmp,0));  
    30.   
    31. 5);  
    32. 0,arr,0,Array.getLength(tmp));  
    33. 2));  
    34. 3));  
    35.     }  
    36. }

      1. import
      2. interface
      3. public static final String NAME = "CHINA";   
      4. public int AGE = 60;   
      5. public void
      6. public String sayHello2(String name,int
      7. }   
      8. class Person implements
      9. private
      10. private int
      11. public
      12. return
      13.     }   
      14. public void
      15. this.name = name;   
      16.     }   
      17. public int
      18. return
      19.     }   
      20. public void setAge(int
      21. this.age = age;   
      22.     }   
      23. public void
      24. "  "+AGE);   
      25.     }   
      26. public String sayHello2(String name,int
      27. return name+" "+age;   
      28.     }   
      29. }