Skip to content

二十四、类加载器

一、概述

1、什么是类加载器

类加载器:负责把.class文件(存储的物理文件)加载到内存中

二、类加载的过程

1、加载时机

  1. 创建类的实例(对象)
  2. 调用类的类方法
  3. 访问类或者接口的类变量,或者为该类变量赋值
  4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
  5. 初始化某个类的子类
  6. 直接使用java.exe命令来运行某个主类

2、加载过程

3、验证-准备-解析


(1)验证


(2)准备


(3)解析

4、初始化

5、小结

  • 当一个类被使用的时候,才会加载到内存
  • 类加载的过程:加载、验证、准备、解析、初始化

三、类加载器的分类

  1. 启动类加载器:虚拟机内置的类加载器
  2. 平台类加载器:负责加载JDK中一些特殊的模块
  3. 系统类加载器:负责加载用户类路径上所指定的类库

四、双亲委派模型

1、代码演示

java
//获取系统类加载器
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();

//获取系统类加载器的父加载器   ---平台加载器
ClassLoader classLoader1 = systemClassLoader.getParent();

//获取平台类加载器的父加载器  ---启动类加载器
ClassLoader classLoader2 = classLoader1.getParent();

System.out.println("系统类加载器  " + systemClassLoader);
System.out.println("平台加载器  " + classLoader1);
System.out.println("启动类加载器  " + classLoader2);

2、结果

bash
系统类加载器  jdk.internal.loader.ClassLoaders$AppClassLoader@36baf30c
平台加载器  jdk.internal.loader.ClassLoaders$PlatformClassLoader@12edcd21
启动类加载器  null