在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言。
Perl、Python、Ruby是动态语言;C++、Java、C#不是动态语言。
Java程序可以加载一个运行时才得知名称的class,获悉其完整构造,并生成其对象实体,或对其fields设值,或唤起其methods。
反射主要有两个重要功能:
可以通过反射机制发现对象的类型,发现类型的方法、属性、构造器。
可以创建对象并访问任意对象方法和属性等。
Class类的实例表示正在运行的Java应用程序的类和接口。
通过Class实例可以获取某个类的属性(Field)、构造器(Constructor)、方法(Method)。
程序可以通过Method对象来执行对应的方法,通过Constructor对象来调用对应的构造器创建实例,能通过Field对象直接访问并修改对象的属性值