0961140210CSDN
package 反射;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
try {
Class clazz = Class.forName("反射.Student");
//获取所有属性
System.out.println("属性:");
Field f[] = clazz.getDeclaredFields();
for (int i = 0; i < f.length; i++) {
System.out.println(f[i].getName());
}
System.out.println("----------");
//获取所有方法
System.out.println("方法:");
Method m[] = clazz.getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
System.out.println(m[i].toString());
}
System.out.println("----------");
//通过java的反射机制动态修改对象的属性
//getMethod方法第一个参数指定一个需要调用的方法名称,第二个参数是需要调用方法的参数类型列表,如无参数可以指定null,该方法返回一个方法对象
Student s = new Student();
Class c = s.getClass();
Method sAge = c.getMethod("setAge",new Class[]{int.class});
Method gAge = c.getMethod("getAge",null);
//动态修改Sutdent对象的age
Object[] age = {new Integer(25)};
sAge.invoke(s, age);
//动态取得Student对象的age
Integer newGAge = (Integer)gAge.invoke(s,null);
System.out.println("the Customer age is: " + newGAge.intValue());
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Student {
private String sno;
private String sname;
private int age;
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void sPrint(){
System.out.println("sno:"+sno+",sname:"+sname+",age:"+age);
}
}