java中类的加载

article/2025/10/12 5:40:16

类加载器的作用:

java中源文件通过java编译器产生了字节码文件,而类加载器及时负责将字节码文件加载到内存中。并将这些静态数据转化成方法区中运行时数据结构。然后再堆中生成一个代表个类的class对象,即java.lang.class类对象。


类缓存:

标准的javaSE类加载器加载可以按照要求查找类,一旦某一个类被加载到类加载器中时,这个class对象会维持加载一段时间。然后由JVM中的垃圾回收机制回收。

 

引导类类加载器分类:引导类加载器、扩展类加载器、系统类加载器

 示例代码:

public class test02 {public static void main(String[] args) throws ClassNotFoundException {//获取系统类加载器ClassLoader c=ClassLoader.getSystemClassLoader();System.out.println(c);//获取系统类加载器父类--扩展类加载器ClassLoader parent = c.getParent();System.out.println(parent);//获取根类加载器ClassLoader parent1 = parent.getParent();System.out.println(parent1);//测试当前类是由哪个类加载器加载ClassLoader t = Class.forName("test02").getClassLoader();System.out.println(t);}}

运行结果:

双亲委派机制

除了根类加载器之外,其他类都要有自己的父类加载器,从JDK1.2开始,类加载过程采用双亲委派机制,这种机制很好的保护了java程序的安全。

classloader和URLclassloader

      Classloader 

          是所以类加载器都需继承的父类,除根类加载器,它是一个抽象类,其中有许多方法。ClassLoader类使用委托模式来搜索类和资源。 ClassLoader的每个实例都有一个关联的父类加载器。 当请求查找类或资源时, ClassLoader实例将在尝试查找类或资源本身之前将类或资源的搜索委托给其父类加载器。 虚拟机的内置类加载器(称为“引导类加载器”)本身不具有父级,但可以作为ClassLoader实例的父级。

方法: 

1、loadclass:

  • public 类<?> loadClass(String name) throws ClassNotFoundException
  • 加载指定的课程binary name 。 该方法以与loadClass(String, boolean)方法相同的方式搜索类。 它由Java虚拟机调用来解析类引用。 调用此方法相当于调用loadClass(name, false)

2、findclass:

  • protected 类<?> findClass(String name) throws ClassNotFoundException
  • 查找具有指定的课程binary name 。 该方法应该被加载类的委托模型后面的类加载器实现覆盖,并且在检查所请求的类的父类加载器之后将被loadClass方法调用。 默认实现会抛出一个ClassNotFoundException 。

 3、defineclass:

  • protected final 类<?> defineClass(String name, byte[] b, int off, int len) throws ClassFormatError
  • 将字节数组转换为类别类的实例。 在类可以使用之前必须解决。
  • 此方法将默认的ProtectionDomain分配给新定义的类。 该ProtectionDomain有效授予时相同的权限集返回Policy.getPolicy().getPermissions(new CodeSource(null, null))被调用。 默认域是在首次调用defineClass时创建的,并在以后的调用中重新使用。

4、resolveclass:

  • protected final void resolveClass(类<?> c)
  • 链接指定的类。 这个(误导性的)方法可能被类加载器用来链接一个类。 如果c类已经被链接,那么这个方法只是返回。 否则,课程将按照The Java™ Language Specification的“执行”一章中的描述进行链接 。

URLclassloader

    在java.net包中,jdk提供了一个更加易用的加载器URLclassloader,它扩展了classloader,能够从网络或本地上指定位置加载类。我们可以使用该类做自定义加载器使用。

菜鸟本菜,如有帮助十分荣幸。

 


http://chatgpt.dhexx.cn/article/pJJfErBH.shtml

相关文章

Java类加载过程详解

类的生命周期 类的加载类加载过程加载链接验证准备解析 初始化 总结 首先我们先简单了解一下整个JVM的体系结构是怎样的&#xff0c;如下图所示&#xff08;图1&#xff09;&#xff1a; 再详细具体一点&#xff08;图2&#xff09;&#xff1a; 上面的图片有些地方看不懂没关系…

什么是类的加载(Java)

一、什么是类的加载 java文件通过编译器变成了.class文件&#xff0c;接下来类加载器又将这些.class文件加载到JVM中。其中类装载器的作用其实就是类的加载。 其实&#xff0c;类加载器并不需要等到某个类被“首次主动使用”时再加载它&#xff0c;JVM规范允许类加载器在预料某…

【JVM】Java类加载机制详解

【JVM】Java类加载机制详解 文章目录 【JVM】Java类加载机制详解一&#xff1a;类加载子系统1&#xff1a;类加载器子系统的作用2&#xff1a;加载器 ClassLoader 的角色 二&#xff1a;类的加载过程1&#xff1a;加载阶段2&#xff1a;验证阶段&#xff1a;确保被加载的类的正…

JAVA开发(java类加载过程)

1、java语言的平台无关性。 因为java语言可以跑在java虚拟机上&#xff0c;所以只要能装java虚拟机的地方就能跑java程序。java语言以后缀名 .java为文件扩展名。通过java编译器javac编译成字节码文件.class 。java字节码文件通过java虚拟机解析运行。在虚拟机级别对class文件…

图解Java类加载机制

文章目录 前言类加载的概述双亲委派加载机制类加载的隔离机制contextClassLoaderSPI用处找文件用处 类加载的顺序顺序概述类加载的一般方式类加载的触发点 类的实例化多线程环境下&#xff0c;为何也只有一个Class的对象 图解和举例普通Java应用日常Web应用 附录 前言 网上有很…

【Java 】Java 类加载和类加载器

文章目录 前言一、加载二、链接验证准备解析 三、初始化发生的时机不会触发类的初始化 四、类加载器双亲委派模式 前言 Java 的类加载阶段分为&#xff1a;加载、链接、初始化&#xff0c;而链接的过程中包括&#xff1a;验证、准备、解析。 一、加载 将类的字节码载入方法区…

Java类加载过程图解

朋友给我发了一道有意思的题目&#xff0c;如下 为什么用.class的方式加载类和以Class.forName()的方式加载的结果不同呢&#xff0c;原因很简单&#xff0c;就是类加载过程的不同。 这就扯到基础理解上了&#xff0c;就是Java是如何加载一个类的呢&#xff1f; 上图是我绘制的…

Java类加载器加载类顺序

java ClassLoader的学习 java是一门解释执行的语言&#xff0c;由开发人员编写好的java源文件先编译成字节码文件.class形式&#xff0c;然后由java虚拟机(JVM)解释执行&#xff0c;.class字节码文件本身是平台无关的&#xff0c;但是jvm却不是&#xff0c;为了实现所谓的一次…

java类如何加载

最近研究java的进阶知识&#xff0c;先从java类加载机制学起&#xff0c;原先看过《深入理解java虚拟机》这本书&#xff0c;奈何书的知识面太广及自身只看了一遍&#xff0c;很多知识并不是很理解&#xff0c;今天看了几篇别人讲解的java类加载机制&#xff0c;觉得讲的很好&a…

JVM——Java类加载机制总结

1. 类加载器的组织结构 转载请注明出处&#xff1a;JVM——Java类加载机制总结_SEU_Calvin的博客-CSDN博客 类加载器 ClassLoader是具有层次结构的&#xff0c;也就是父子关系。其中&#xff0c;Bootstrap是所有类加载器的父亲。 &#xff08;1&#xff09;Bootstrapclass lo…

深入理解Java类加载器(1):Java类加载原理解析

1 基本信息 每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生&#xff0c;这背后就涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分&#xff0c;虽然和大部分开发人员直接打交道不多&#xff0c;但是对其背后的机理有一定理解…

深入理解Java类加载器(一):Java类加载原理解析

摘要&#xff1a; 每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生&#xff0c;这个异常背后涉及到的是Java技术体系中的类加载机制。本文简述了JVM三种预定义类加载器&#xff0c;即启动类加载器、扩展类加载器和系统类加载器&#xff0c;并介绍和分析它…

【Java · 类加载】类加载器

1. 概述 类加载器是 JVM 执行类加载机制的前提。 ClassLoader的作用&#xff1a; ClassLoader是Java的核心组件&#xff0c;所有的Class都是由ClassLoader进行加载的&#xff0c;ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部&#xff0c;转换为一个与目…

java类加载

当程序主动使用某个类时&#xff0c;如果该类还未被加载到内存中&#xff0c;则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外&#xff0c;JVM将会连续完成3个步骤&#xff0c;所以有时也把这个3个步骤统称为类加载或类初始化。 一、类加载过程 加载指…

Java的类加载

1、类的加载过程 Java文件通过javac编译成.class二进制字节码文件&#xff0c;然后交给类加载器加载到我们的虚拟机内存中,最后我们通过new 对象来实现对象的初始化&#xff0c;才能调用和执行这个类&#xff0c;类的加载有三步&#xff1a;加载、连接、初始化。 1.1、加载 …

Java类的加载

类的生命周期 当java源代码文件被javac编译成class文件后&#xff0c;并不能直接运行&#xff0c;而是需要经过加载&#xff0c;连接和初始化这几个阶段后才能使用。在使用完类或被销毁后&#xff0c;JVM会将类卸载掉。 类加载的过程 类加载的过程需要经过三个阶段分别是&a…

「WAVE SUMMIT 2022深度学习开发者峰会」火热来袭

「WAVE SUMMIT 2022深度学习开发者峰会」火热来袭&#xff01; 会上您将了解以飞桨为代表的深度学习领域的最新技术突破&#xff01; 看最新的AI技术如何助力我国产业发展&#xff0c;先人一步了解技术风向。 5月20日 13:00期待与您相聚云端 报名即送好礼&#xff0c;快来参与吧…

Wave(.wav)文件格式

Wave文件格式主要是用来存储音频PCM数据的&#xff0c;其实也可以存储非PCM音频数据&#xff0c;这种情况我们就不考虑了。文件的扩展名为“.wav”&#xff0c;采用RIFF文件结构。 一、RIFF文件格式简介 1、RIFF文件是由一个一个的chunk组成的&#xff0c;并且chunk之间可以嵌…

wave文件格式

Wave文件采用RIFF文件格式&#xff0c;总体来看Wave文件是由多个chunk嵌套组成的&#xff1b;Wave文件最外层是一个标识为"RIFF"的类型块chunk1&#xff1b;在chunk1的data部分嵌套了2个chunk&#xff0c;即chunk2和chunk3&#xff1b;chunk2的标识为"fmt"…

WAVE 文件格式分析

WAVE 文件作为多媒体中使用的声音波形文件格式之一&#xff0c;它是以RIFF&#xff08;Resource Interchange File Format&#xff09;格式为标准的。每个WAVE文件的头四个字节便是“RIFF”。WAVE 文件由文件头和数据体两大部分组成。其中文件头又分为 RIFF&#xff0f;WAV 文件…