一.什么是反射机制
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
二.反射的原理
java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区。方法区的主要作用是存储被装载的类的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class中的类型信息,将这些信息存储到方法区中。
1,反编译:.class-->.java
2,通过反射机制访问java对象的属性,方法,构造方法等;
三.代码
public class Test {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class<People> c=People.class;
//Class<?> c1= Class.forName("People");获取.class文件
//Class c2=new People().getClass();
People p=(People) c.newInstance();//创建p对象
Method m=c.getDeclaredMethod("setAge",int.class );//获得方法名与参数类型
m.setAccessible(true);//设置可以访问private对象
m.invoke(p,99);//通过方法设置p的参数
System.out.println(m);//输出方法名
System.out.println(p.getAge());//输出p的年龄
}
}
class People{
private int age;
String name;
public void info(){
System.out.println("people");
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}