反射

1 字节码文件对象(也叫Class对象)

javac 是java语言编程编译器。全称java compiler。它将文件HelloWorld.java编译成HelloWorld.class文件,并发送到java虚拟机。虚拟机执行编译器放在class文件中的字节码。

当用java HelloWorld.class命令去执行该字节码文件时,JVM会把该文件加载到内存,并创建一个该文件对象的字节码文件对象,该对象的类型是Class,注意java中所有的对象都是通过这个字节码对象创建的,

在一次程序运行过程中,通过同一个类创建的对象得到的字节码文件对象是同一个,

2 Class对象有四个功能

1.获取成员变量们  2.获取构造方法们  3.获取成员方法们  4.获取类名

1>  a.set(p,"张三"); p是new出的对象,张三是p中成员变量的具体的值,a是成员变量对象,这个语句是把成员该对象的成员变量a赋值为张三,如果是获取值用get方法,

 2> 获取构造方法和1 3不同,利用Class获取了Constructor对象后,可以直接利用该对象的newInstance方法生成Class对象,(因为有构造方法就可以创建对象

3>  eat_method.invoke(p,"饭"); 先利用getMethod获取到方法,再利用invoke函数执行方法,

3 反射的关键在于:

先利用Class对象的功能获取指定对象的变量、方法,再创建对象,最后把获取的变量和方法加入到对象中,这样只需修改配置文件中类的路径名和变量、方法名就可以实现不同的类中不同的方法。

 

 
原文地址:https://www.cnblogs.com/xxswkl/p/13193868.html