1.类装载器ClassLoader
JVM在运行时中有三个ClassLoader:根装载器,ExtClassLoader和AppClassLoader。
三个装载器有不同的作用:
根装载器:有C++编写,负责装载JRE的核心类库;
ExtClassLoader:负责装载JRE扩展目录ext的类库;
AppClassLoader:负责装载Classpath下的路径(应用使用);
其中根加载器是ExtClassLoader的父加载器,ExtClassLoader是AppClassLoader的父加载器。
类装载器装载class的步骤:
1.1 装载class
1.1.1 查找class文件
1.1.2 把class文件导入
1.2 链接
这一步主要是执行校验,分配静态变量的存储空间和解析
1.3 初始化
如果类中有静态变量或静态代码块,则执行初始化
JVM装载类时,使用“全盘负责委托机制”,“全盘委托”是指一个ClassLoader负责加载一个类及其引用的所有类;
“委托机制”是指先委托父加载器寻找目标类,如果找不到,则从自己的类路径中查找并加载类。
2.java 反射
通过java的反射机制可以获取Class对象中的构造函数,成员变量,方法等类元素,并操作相应的class对象。
反射API在java.reflect包,其中最常用,也是最主要的有4个:
Class类:代表一个类;
Constructor类:类的构造方法;
Method类:类的方法;
Field类:类的成员变量(属性 );
Class类:代表一个类。
Field 类:代表类的成员变量(成员变量也称为类的属性)。
Method类:代表类的方法。
Constructor 类:代表类的构造方法。