1.类加载器
把加载阶段的 “通过一个类的全限定名来获取一个类的二进制字节流”这个动作放到java虚拟机外部去实现,实现这个动作的代码模块为“类加载器”
三种不同的类加载器:启动类加载器、扩展类加载器、应用程序类加载器
除此之外,还有自定义的类加载器,它们之间的层次关系被称为类加载器的双亲委派模型。该模型要求除了顶层的启动类加载器外,其余的类加载器都应该有自己的父类加载器,而这种父子关系一般通过组合(Composition)关系来实现,而不是通过继承(Inheritance)。
双亲委派模型工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己尝试加载这个类,而是把这个请求给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求时,子加载器才会尝试自己去加载。
好处:java类随着它的类加载器一起具备了一种带有优先级的层次关系。Object类是都会交给启动类加载器加载,所以,Object类在程序的各个类加载器环境中都是同一个类。