类的加载器 ClassLoader

先说明类的加载过程:

当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过如下三个步骤来对该类进行初始化:

而关于ClassLoader:

类加载器是用来把类(class)装载进内存的。JVM 规范定义了两种类型的类加载器:启动类加载器(bootstrap)和用户自定义加载器(user-defined
class loader)。
JVM在运行时会产生3个类加载器组成的初始化加载器层次结构
,如下图所示:

举例如下:

  1. public class TestClassLoader {
  2. public static void main(String[] args) throws ClassNotFoundException {
  3. ClassLoader classLoader1 = ClassLoader.getSystemClassLoader();// 获取系统类加载器
  4. System.out.println(classLoader1);// [email protected]
  5. ClassLoader classLoader2 = classLoader1.getParent();// 获取扩展类加载器
  6. System.out.println(classLoader2);// [email protected]
  7. ClassLoader classLoader3 = classLoader2.getParent();// 尝试获取引导类加载器
  8. System.out.println(classLoader3);// null
  9. ClassLoader classLoader4 = String.class.getClassLoader();// 核心类库使用引导类加载器
  10. System.out.println(classLoader4);// null
  11. ClassLoader classLoader5 = com.cdf.reflection.Person.class.getClassLoader();// 自建类使用系统类加载器
  12. System.out.println(classLoader5);// [email protected]
  13. }
  14. }

需要说明的是,常用类加载器来获取当前包下的文件:

时间: 2024-12-28 04:12:56

类的加载器 ClassLoader的相关文章

别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】

目录 1.什么是类的加载(类初始化) 2.类的生命周期 3.接口的加载过程 4.解开开篇的面试题 5.理解首次主动使用 6.类加载器 7.关于命名空间 8.JVM类加载机制 9.双亲委派模型 10.ClassLoader源码分析 11.自定义类加载器 12.加载类的三种方式 13.总结 14.特别注意 @ 前言 你是否真的理解java的类加载机制?点进文章的盆友不如先来做一道非常常见的面试题,如果你能做出来,可能你早已掌握并理解了java的类加载机制,若结果出乎你的意料,那就很有必要来了解了解j

【深入理解Java虚拟机 】类的加载器

1. 类加载器的分类 JVM 自带的类加载器 根类加载器( BootStrap ) 拓展类加载器 ( Extension ) 系统 (应用) 加载器 ( System / AppClassLoader) 开发者自己创建的类加载器 java.long.ClassLoader 的子类 public abstract class ClassLoader { // 抽象类,不能实例化吗,需要继承并重写其方法 } 2. 加载时机 类加载器不是在 "首次主动" 使用的时候采取尝试加载一般情况下回提

java 27 - 1 反射之 类的加载器

说到反射,首先说类的加载器. 类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载: 就是指将class文件读入内存,并为之创建一个Class对象. 任何类被使用时系统都会建立一个Class对象. 连接: 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 初始化: 就是我们以前讲过的初始化步骤 类初始化时机: 创建类的实

Day18 (一)类的加载器

一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这个虚拟机实例也就随之消亡. 如果在同一台计算机上同时运行多个Java程序,将得到多个Java虚拟机实例,每个Java程序都运行于它自己的Java虚拟机实例中. 在如下几种情况下,Java虚拟机将结束生命周期: 1.执行了System.exit()方法 2.程序正常执行结束 3.程序在执行过程中遇到了异常或错误而异常终止 4.由于操作系统出现错误而导致Java虚拟机进程终

java 自定义类的加载器

首先介绍自定义类的应用场景: (1)加密:Java代码可以轻易的被反编译,如果你需要把自己的代码进行加密以防止反编译,可以先将编译后的代码用某种加密算法加密,类加密后就不能再用Java的ClassLoader去加载类了,这时就需要自定义ClassLoader在加载类的时候先解密类,然后再加载. (2)从非标准的来源加载代码:如果你的字节码是放在数据库.甚至是在云端,就可以自定义类加载器,从指定的来源加载类. (3)以上两种情况在实际中的综合运用:比如你的应用需要通过网络来传输 Java 类的字节

类的加载器和反射

类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化.  加载 就是指将class文件读入内存,并为之创建一个Class对象. 任何类被使用时系统都会建立一个Class对象   连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 类的初始化时机 1. 创建类的实例 2. 类的静态变量,或者为静态变量赋值 3. 类的静态方法 4

类自动加载器

1 /** 2 * Created by [中弘集团] qq 812035863 . 3 * User: Taoist 4 * Date: 2015/7/9 5 * Time: 20:57 6 * description: 自动类加载 7 * 入口文件首先载入加载器 8 * 9 * 加载文件要放在类库内才有作用 10 * 11 * 如果 root 是根目录 12 * 13 * /root/library 是库目录 14 * 15 * autoload文件放在library 下面 16 * 17

java 反射,类的加载过程以及Classloader类加载器

首先自定义一个类Person package reflection; public class Person { private String name; public int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int a

类的加载和反射

一.类的加载 类的加载一共分为三步: 1.加载 就是将类加载进内存,并同时创建一个Class对象(就是描述一个 .class 文件的对象) 而且任何类被使用前都会先创建一个 Class对象 2.连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 3.初始化 见前面的初始化笔记. 初始化的时机: 创建类的实例 访问类的静态变量,或者为静态变量赋值 调用类的静态方法 使用反射方式来强制创建某个类