小牛犊 发表于 2013-1-27 05:11:42

Reflection 反射

1.得到对象的属性字段
   (1)getFields()
public class PropertyTest {public static void main(String[] args) {Met p = new Person();// Person p=new Person(); //结果一样// Zou p=new Person(); //结果一样Class c = p.getClass();Field[] f = c.getFields();for (int i = 0; i < f.length; i++) {System.out.println(f);}}}class Person extends Zou implements Met {public String name;protected String address;private int age;int kk;}interface Met {public String interfaceFiled = "ff";}abstract class Zou {public String abstractFiled;}    运行结果
public java.lang.String com.flh.reflection.Person.namepublic static final java.lang.String com.flh.reflection.Met.interfaceFiledpublic java.lang.String com.flh.reflection.Zou.abstractFiled 结论:相信已经一目了然,getFields()返回该类(包括实现的接口和继承的抽象类)的所有可访问的公共字段。
 另:getField(String name)返回某一具体的字段。
 
2.得到对象的属性值
public class FieldTest {public static void main(String[] args) {User user=new User();user.name="yyming";Class c=user.getClass();try {Field f=c.getField("name");Object o=f.get(user);System.out.println(o);} catch (SecurityException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}}class User{public String name;protected String address;private int age;int kk;}   运行结果:yyming
   f.get(user)通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。

 
3.得到静态的属性值
   见上上面的例子
   Object o=f.get(user);
   Object o=f.get(c);
   即可以通过类的实例,也可以通过Class类的实例得到。
 
4.得到对象的方法
public class MethodTest {public static void main(String[] args) {Animal a = new Animal();Class c = a.getClass();Method[] method = c.getMethods();for (int i = 0; i < method.length; i++) {System.out.println(method);}}}class Animal {public void eat() {System.out.println("动物吃东西");}public static void eat(String s) {System.out.println("动物吃" + s);}private void lasi() {System.out.println("动物拉斯");}protected void run() {System.out.println("动物跑");}}    运行结果:
public void com.flh.reflection.Animal.eat()public static void com.flh.reflection.Animal.eat(java.lang.String)public final void java.lang.Object.wait() throws java.lang.InterruptedExceptionpublic final void java.lang.Object.wait(long,int) throws java.lang.InterruptedExceptionpublic final native void java.lang.Object.wait(long) throws java.lang.InterruptedExceptionpublic native int java.lang.Object.hashCode()public final native java.lang.Class java.lang.Object.getClass()public boolean java.lang.Object.equals(java.lang.Object)public java.lang.String java.lang.Object.toString()public final native void java.lang.Object.notify()public final native void java.lang.Object.notifyAll() 

 
  
      
页: [1]
查看完整版本: Reflection 反射