Java 虚拟机一般使用 Java 类的流程:首先将开发者编写的 Java 源代码(.java 文件)编译生成 Java 字节码文件 (.class 文件)存储在磁盘上,然后类加载器会读取字节码文件,并转换成 java.lang.Class 对象。有了该 Class 对象后,Java 虚拟机 可以利用反射方法创建其真正的对象了。 编译期:语法,语义解析 查看当前字节码结构:javap -verbose TestDemo
1.类加载器分类
JDK 提供的三种类加载器,分别是 Bootstrap ClassLoader(启动类加载器),ExtClassLoader(扩展类加 载器),AppClassLoader(应用类加载器),继承关系
1.1 Bootstrap classLoader(启动类加载器)
(顶级类加载器) null C/C++实现 jir/lib/*.jar
1.2 Extension ClassLoader(扩展类加 载器)
jre/lib/ext/*.jar
1.3 Application ClassLoader(应用类加载器)
ClassPath(用户自定义路径)
1.4 查看类加载器
public static void main(String[] args)
{
Class<?> c = null;
c=SingleLink.class;
System,out,println(c.getClassLoader())
}
2.双亲委派模型
3.类加载过程
3.1类加载时机
1.People p = new People(); 2.类.静态成员 Arrays.copyOf(); 3.main所在的类 4.反射
3.2 阶段
第一大阶段:加载(装载)阶段 类加载器 产物:生成当前类Class对象 第二大阶段:链接阶段 验证:魔数验证(.class),版本号验证 准备:给静态变量开辟内存,并赋类型默认值 解析:符号引用转换为直接引用 第三大阶段:初始化阶段 给静态变量赋值操作 静态块
|