(注意) 虚拟机只加载程序执行时所需要的类文件。我们假设加载Demo.class文件开始
1、虚拟机有一个用于加载类文件的机制,例如,从磁盘上读取文件或者请求web上的文件,使用该机制加载Demo.class文件的内容。
2、如果Demo类拥有类型为另一个类的域,或者是拥有超类,那么这些类文件也会被加载,(加载某个类所依赖所有类的过程称为类的解析)
3、接着虚拟机执行Demo的main方法(他是静态的,无需创建类的实例)
4、如果main方法或者main方法调用的方法要用到更多的类,那么接下类就会加载这些类。
然而,类加载机制并非只是使用单个的类加载器,每个java程序至少拥有是三个类加载器
引导类加载器
拓展类加载器
系统类加载器
引导类加载器负责加载系统类(通常从rt.jar中进行加载),它是虚拟机不可分割的一部分,而且
通常是用c语言实现的,引导类加载器没有对应的ClassLoader对象,例如该方法
拓展类加载器用于从jre/lib/ext 目录加载标准的拓展,可以将jar文件放入改目录。这样即使没有任何类路径,拓展类加载器也可以找到其中的各个类,
系统类加载器用于加载应用类,他是有classpath环境变量或者-classpath命名行选项设置的类路径中的目录是Jar/ZIp文件里查找这些类。