Java反射机制:
Reflection是被视为动态语言的关键,反射机制允许程序在执行阶段借助Reflection API取得任何类内部的信息,并能直接操作任意对象的内部属性和方法
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器
例如:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private void show()
{
System.out.println(this.name+" "+this.age);
}
public String toString()
{
return this.name+" "+this.age;
}
}
反射实例:
public class ClassTest {
public static void main(String[] args) throws Exception {
//通过反射创建Person类对象
Class<Person> clazz=Person.class;
Constructor<Person> con=clazz.getConstructor(String.class,int.class);
Person person=(Person) con.newInstance("ton",12);
System.out.println(person.toString());
//通过反射调用指定的方法 属性
//调用私有属性
Field name=clazz.getDeclaredField("name");
name.setAccessible(true);
name.set(person, "xiaom");
Field age=clazz.getDeclaredField("age");
age.setAccessible(true);
age.set(person,15);
System.out.println(person.toString());
//调用私有方法
Method show=clazz.getDeclaredMethod("show");
show.setAccessible(true);
show.invoke(person);
//调用公有方法
Method toString=clazz.getDeclaredMethod("toString");
System.out.println(toString.invoke(person));
}
}