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[i]);
		}
	}
}
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.name
public static final java.lang.String com.flh.reflection.Met.interfaceFiled
public 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[i]);
		}
	}
}
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.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public 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()

 

 

  

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值