反射 - Reflection
程序在运行当中 可以构建任何一个类的对象,可以了解任何一个对象所属的类,可以了解任何一个对象的成员变量和成员方法,可以调用任何一个类的属性和方法,这种动态获得程序信息以及 动态调用对象的功能叫做Java的反射语言机制。反射是动态语言的关键。
类加载器
三种类加载器
BootstrapClassLoarder - 引导启动加载器
嵌在JVM内核的加载器,由C++语言写的,主要加载JAVA_HOME/lin目录下的类库,无法被应用程序直接使用。
ExtesionClassLoarder - 扩展类加载器
主要加载JAVA_HOME/lin/ext 目录下的类库,是引导启动加载器的子类
APP ClassLoarder 应用程序加载器
主要加载Classpath 下的jar和class文件, 是扩展类加载器的子类。
加载器使用双亲委派机制保证资源不被重复加载
子类接收到类的加载请求时,把这个请求交给父类,父类交给它的父类,如果其中有已存在的或可以加载的则由父类加载,如果都没有则由父类传给它的子类,子类无法加载,在交给它的子类。
类加载器 加载资源 默认是src路径下的文件,如果存在resoure root 目录时,则加载resoure root 目录下的资源
要想了解一个类,必须先要获取到该类的字节码文件对象. 在Java中,每一个字节码文件,被夹在到内存后,都存在一个对应的Class类型的对象 // 一个Class文件不会存在两个对象
得到Class文件的三种方式
1.Class a = Class.forName(“类的全名”)
2.Class<类名> a = 类名全名.class;
3.存在类的一个对象 a;
Class<类型> =(Class<类型>) a.getClass;
获得构造方法
通过getMethod 获得方法
通过getMethods 获得方法数组
常用方法
内省
内省 是Java基于反射提供的一套应用于javabean的API
bean类:
定义在包中
所有属性私有
所有属性提供get/set方法
实现序列化接口 //Serializable
基于反射 对其进行封装