首页 > 其他分享 >类加载机制

类加载机制

时间:2024-08-07 20:17:26浏览次数:13  
标签:反射 Java JVM 机制 方法 Class 加载

类加载机制

类加载器(ClassLoader):

类加载器负责将.class文件加载到JVM中。Java虚拟机使用一个分层的类加载器架构,通常包括以下几种类型的类加载器:

  • 启动类加载器(Bootstrap ClassLoader):负责加载Java核心库类,如java.lang.Object
  • 扩展类加载器(Extension ClassLoader):负责加载扩展目录(如jre/lib/ext)中的类库。
  • 应用类加载器(System ClassLoader):负责加载应用程序类路径(如-cp参数指定的路径)上的类库。

类加载过程:

Java类的加载过程通常包括以下三个步骤:

  • 加载(Loading):类加载器找到.class文件,并将它加载到JVM中。
  • 链接(Linking):包括验证(确保加载的类信息符合JVM规范)、准备(为静态变量分配内存并设置默认初始值)和解析(将符号引用替换为直接引用)。
  • 初始化(Initialization):执行类构造器<clinit>()方法,为静态变量赋予正确的初始值。

类对象(Class Object):

每个加载到JVM中的类都有一个对应的java.lang.Class对象,它包含了类的元数据信息,如类的名称、字段、方法、构造函数等。

反射API:

Java反射API提供了一组类和接口,用于操作Class对象和类的成员。主要的类和接口包括:

  • Class:代表类和接口的静态类型信息。
  • FieldMethodConstructor:分别代表类的字段、方法和构造函数。
  • Array:提供动态创建和访问Java数组的方法。

获取 Class 对象:

在反射中,可以通过以下方式获取Class对象:

  • 使用类字面量:Class<?> clazz = MyClass.class;
  • 通过实例对象的getClass()方法:MyClass obj = new MyClass(); Class<?> clazz = obj.getClass();
  • 使用类加载器的loadClass()方法。

动态类加载:

使用反射,可以在运行时动态加载和使用类。这可以通过调用类加载器的loadClass()方法实现,也可以通过自定义类加载器实现。

访问控制:

使用反射可以绕过Java的访问控制,访问私有成员。这通过调用AccessibleObjectFieldMethodConstructor的超类)的setAccessible(true)方法实现。

类型转换和实例化:

使用反射,可以创建类的实例,即使类没有可访问的构造函数。这通过调用Class对象的newInstance()方法实现,或者使用Constructor对象的newInstance()方法。

异常处理:

反射操作可能会抛出多种异常,如ClassNotFoundExceptionIllegalAccessExceptionInstantiationExceptionNoSuchFieldExceptionNoSuchMethodException等。这些异常需要在反射操作中进行适当的处理。

标签:反射,Java,JVM,机制,方法,Class,加载
From: https://www.cnblogs.com/luoyiwen123/p/18347837

相关文章

  • mapboxgl 加载瓦片网格
    importmapboxglfrom"mapbox-gl";exportdefaultclassGridLayer{constructor(map){this.map=map;this.gridSourceId="grid-source";this.gridLayerId="grid-layer";this.labelSourceId="label-sour......
  • 保存/加载自定义 tf.keras.Model 时出现问题
    我正在构建一个作为自定义tf.keras.Model实现的自动编码器。虽然训练后的模型表现良好,但我无法正确保存并重新加载它。我已经尝试过model.save()方法和save_weights()但在这两种情况下,模型完全无法执行其任务。此自动编码器正在调用另外两个tf.keras.Model,即编码器和......
  • Spring - 事件监听机制
    Spring-事件监听机制  Spring事件驱动模型也是观察者模式很经典的应用。就是我们常见的项目中最常见的事件监听器。 一、Spring中观察者模式的四个角色 1. 事件-ApplicationEvent ApplicationEvent是所有事件对象的父类。ApplicationEvent继承自jdk的E......
  • 类加载机制
    什么是类加载机制我们编写的Java文件都是以.java为后缀的文件,编译器会将我们编写的.java的文件编译成.class文件,简单来说类加载机制就是jvm从文件系统将一系列的class文件z转化为二进制流加载JVM内存中并生成一个该类的Class对象,为后续程序运行提供资源的动作。整体的......
  • YoloV9改进策略:注意力机制改进|通过iAFF模块优化RepNBottleneck结构,YoloV9性能飞跃|即
    摘要在深度学习和计算机视觉领域,YoloV9以其卓越的目标检测性能赢得了广泛的关注与应用。为了进一步提升YoloV9的识别精度和鲁棒性,我们创新性地在其核心组件——RepNBottleneck模块中引入了迭代注意力特征融合(iAFF)模块。这一改进不仅实现了显著的涨点效果,还展现了在复杂场景......
  • YoloV8改进策略:注意力机制改进|全局与局部注意力融合(AFF)|即插即用
    摘要在深度学习和计算机视觉领域,YoloV8以其卓越的性能和实时检测能力而广受赞誉。为了进一步提升YoloV8的检测精度和泛化能力,我们创新性地在其核心Bottleneck模块中引入了注意力特征融合(AFF)机制。这一改进不仅实现了即插即用的便捷性,还显著提升了模型的表现,为YoloV8注入了......
  • 2024最新Mysql锁机制与优化实践以及MVCC底层原理剖析
    锁机制详解锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一......
  • 学懂C++(七): C++错误处理机制 -- 异常
    目录前言一、C语言传统的处理错误的方式二、C++异常的概念三、异常的使用3.1异常的抛出和匹配原则3.2在函数调用链中异常栈展开匹配原则3.3异常的重新抛出3.4异常规范四、自定义异常体系五、异常的优缺点优点缺点结论前言        C++提供了一......
  • SpringBoot - SPI机制
    SpringBoot-SPI机制  概要  什么是SPI呢,全称是ServiceProviderInterface。简单翻译的话,就是服务提供者接口,是一种寻找服务实现的机制。这个是针对厂商或者插件的。  其实就是一个规范定义、或者说是实现的标准。  一、SPI思想  SPI的思想:系统里抽象......
  • Vue3中滚动加载更多数据
    <divclass="my-task-body-inner"ref="scrollContainer"@scroll="handleScroll"style="height:100%;overflow-y:auto;"></div>constscrollContainer=ref(null); consthandleScroll=()=>......