加载->验证->准备->解析->初始化->使用->卸载java
若是有
public static int count;
相似这样的变量 【类变量】,分配内存空间的同时初始化一个默认值this
public class LoadStudent {
public static int count = Configuration.getInt("studnet.count");
public static Map<String, Student> students;
static {
initStudents();
}
public static void initStudents() {
this.students = new HashMap<String, Student>();
}
}
复制代码
类初始化的时机:当类被使用的到的时候,如:LoadStudent load = new LoadStudent(); 若是初始化一个类的时候,发现该类有父类,必须先初始化他的父类spa
实现上述初始化类的过程,须要由类加载器来完成,Java中的类加载器有:code
(1)启动类加载器Bootstrap ClassLoader,启动JVM,会加载jdk目录下的lib目录下的核心类库cdn
(2)拓展类加载器Extension ClassLoader,启动JVM,会加载jdk目录下的lib/ext目录下的拓展类库blog
(3)应用程序类加载器Application ClassLoader,加载classpath环境变量哦指定的路径中的类,能够理解成加载你写到的Java代码到内存内存
(4)自定义类加载器,除了上述几种类加载器以外,还能够自定义类加载器get
他们亲子层结构关系以下图:虚拟机
双亲委派机制:简单来讲,子类加载器先会找父类加载器去加载类,找不到的话再由子类去加载string