类加载器负责根据类的全限定名将class文件加载到JVM内存,生成Class类的对象。它分为如下几种类型:java
双亲委派机制:若是一个类未加载,那么必须先由其父加载器(Bootstrap Classloader能够认为是ExtClassLoader父加载器)尝试加载,若是父加载器在其路径内找不到该类才由子加载器加载。能够防止核心类被外来类覆盖。具体的源码分析能够参见深刻理解Java类加载器(ClassLoader)。
下面是结合源码,画出的利用AppClassLoader查找类的流程图:数组
咱们一般写的用class(首字母c小写)定义的类,表征了java虚拟机里对象的类型(java是强类型语言),但同时这些类又都是java.lang.Class(首字母C大写)的对象,经过AppClassLoader加载进虚拟机内存方法区。每一个类都对应一个独一无二的Class对象,包括Java基本类型、void关键字及数组(全部同一维度和类型的数组拥有一样的Class,数组的长度不作考虑。对应Class的名字表示为维度和类型。好比一个整型数据的Class名为“[I”,字节型三维数组Class名为“[[[B”,两维对象数组Class名为“[[Ljava.lang.Object”)。获得Class对象的方法有三种:源码分析
MyObject foo = New MyObject(); Class c = foo.getClass(); Class c = Class.ForName("MyObject"); Class c = MyObject.class;