概述:
动态语言:运行时根据某些条件改变自身结构,如Object-c c# JavaScript PHP Python Erlang等。
静态语言:运行时结构不可变,如Java c c++等。
Java的“”准动态语言“”实现:通过反射机制、字节码操作获得类似动态语言的特性让编程更加灵活。
反射(reflection):加载类后,会在堆内存的方法区中产生此类唯一的Class对象,此对象包含了类的完成信息,并且通过此对象(像镜子一样)可以映射出类的完整信息。
反射的机制:允许程序在执行期间借助Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
正常的方式: 引入需要的“包类”名称 通过new实例化 取得实例化对象
反射方式: 实例化对象 getClass()方法 得到完整的“包类”名称
总之java反射就是实现在运行时状态下对类的操作。
=========================================================================
java反射机制提供程序运行时功能:
- 判断任意一个对象所属的类
- 判断任意一个类拥有的成员变量和方法
- 构造任意一个类的对象
- 调用任意一个对象的的成员变量和方法
- 获取泛型信息
- 处理注解
- 实现动态代理
java.lang.reflect包含三个类:
Constructor;(构造函数)
Field;(域)
Method;(方法)