例子:
package com.dp.java.Reflection;
import java.util.Date;
/**
* 反射字段
*
*/
public class Reflection_2 {
public String name="你访问了!!";
private int age=23;
public static Date time;
public int getAge() {
return age;
}
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.dp.java.Reflection;
import java.lang.reflect.Field;
import java.util.Date;
import org.junit.Test;
public class Reflection_2_test1 {
/**
* 反射字段的访问
*/
@Test
public void test1() throws Exception{
//访问公共string类型的成员变量
// TODO Auto-generated method stub
Class c=Reflection_2.class;
Reflection_2 d=(Reflection_2) c.newInstance();
Field f=c.getField("name");//此方法反映此 Class 对象所表示的类或接口的指定公共成员字段
System.out.println(f.get(d));
//更改name的值
f.set(d, "修改成:Mr_Li13");
System.out.println(d.name);
}
@Test
public void test2() throws Exception{
//访问私有int类型的成员变量
// TODO Auto-generated method stub
Class c=Reflection_2.class;
Reflection_2 d=(Reflection_2) c.newInstance();
Field f=c.getDeclaredField("age");//此方法反映此 Class 对象所表示的类或接口的指定公共成员字段
f.setAccessible(true);//强暴访问私有
System.out.println("访问了:"+f.get(d));
f.set(d, 25);
System.out.println("改成:"+d.getAge());
}
@Test
public void test3() throws Exception{
//访问公共string类型的成员变量
// TODO Auto-generated method stub
Class c=Reflection_2.class;
//Reflection_2 d=(Reflection_2) c.newInstance();
Field f=c.getField("time");//此方法反映此 Class 对象所表示的类或接口的指定公共成员字段
f.set(null, new Date());
System.out.println("时间为:"+Reflection_2.time);
}
public static void main(String[] args) throws Exception {
Reflection_2_test1 dd=new Reflection_2_test1();
dd.test1();
dd.test2();
dd.test3();
}
}
结果显示: