Class.forName()和ClassLoader.loadClass 的区别

java使用反射引起类加载:Class.forName()与classLoader.loadClass的区别 背景知识:JVM怎么运行java代码? Java源文件->编译器->字节码文件(.class文件)->JVM->机器码 1.类加载过程: Jdk通过指令,将.java文件编译成.class文件,.class文件通过自定义类加载器(ClassLoader)使用“双亲委派机制”加载.class文件。 加载->链接(验证,准备,解析)->初始化->调用 加载:在内存中生成java.lang.Class对象。 验证:确保Class文件的字节流中包含的信息是否符合当前虚 阅读详情

Class.forName(className)方法,内部实际调用的方法是 

forName0(className, true, ClassLoader.getClassLoader(caller), caller);



第2个boolean参数表示类是否需要初始化,  Class.forName(className)默认是需要初始化。


一旦初始化,就会触发目标对象的 static块代码执行,static参数也也会被再次初始化。


ClassLoader.loadClass(className)方法,内部实际调用的方法是  ClassLoader.loadClass(className,false);


第2个 boolean参数,表示目标对象是否进行链接,false表示不进行链接,由上面介绍可以,


不进行链接意味着不进行包括初始化等一些列步骤,那么静态块和静态对象就不会得到执行
面试 - 反射中Class.forName()和ClassLoader.loadClass()的区别 ,判断一个类是否已经被加载 ClassLoader关键在于 加载  ->  链接(验证+准备+解析) ->  初始化(使用前的准备) ->  使用  ->  卸载  可以只加载,不链接 ClassLoader.loadClass(className) ClassLoader.loadClass(className,false) 也可以加载,并链接 Class.forName(classNa... 阅读详情

相关推荐

【反射中,Class.forName和ClassLoader区别】

【反射中,Class.forName和ClassLoader区别】

学无止境 1711

class.forname和classloader区别

网上能找到讲class.forname和classloader区别的一堆文章,但多数不是自己想要的,结合别人和自己的分析,重新整理下class.forname和classloader二者区别。 说到class.forname和classloader二者,必须先要了解java类的装载过程。 java类的装载过程 1. 加载 类的加载主要干三件事 通过类的全限定名来获取定义此类的二进制字节流 将这个类字节流代表的静态存储结构转为方法区的运行时数据结构 在堆中生成一个代表此类的java.lang.C

L13763338360的博客 4937

告别TwinCAT:手把手教你用IgH EtherCAT Master在LinuxCNC上搭建实时运动控制平台

本文详细介绍了如何利用IgH EtherCAT Master和LinuxCNC搭建开源实时运动控制平台,替代商业软件TwinCAT。通过分步指南,包括实时Linux环境配置、EtherCAT主站安装、LinuxCNC集成及多轴同步控制实现,帮助开发者构建高性能、低成本的工业自动化解决方案。

weixin_42641741的博客 401

Java中Class.forName和ClassLoader的区别?

1Class.forName除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。源码 2.而classloader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。 3.Class.forName(name,initialize,loader)带参数也可控制是否加载sta...

zhaoquanwei2018的博客 516

VSCode玩转Arduino:手把手解决‘未定义Serial’和头文件找不到的坑

本文详细介绍了在VSCode中配置Arduino开发环境时遇到的‘未定义Serial’和头文件找不到问题的解决方案。通过修改c_cpp_properties.json文件、调整IntelliSense引擎设置以及添加正确的库路径,开发者可以高效解决这些常见错误,提升开发体验。文章还提供了针对不同开发板和平台的高级配置技巧,确保配置的长期有效性。

weixin_42620202的博客 359

Dobot Magician机械臂二次开发指南:如何利用Python脚本和I/O接口实现自动化任务

本文详细介绍了Dobot Magician机械臂的二次开发方法,重点讲解如何通过Python脚本和I/O接口实现高级自动化任务。内容包括开发环境搭建、运动控制API解析、I/O接口应用以及典型场景实现,帮助开发者充分发挥Dobot Magician的潜力,适用于工业自动化、教育科研等领域。

weixin_26968079的博客 267

ClassLoader和ClassForname的区别(详解)

一、概述  1.clssLoader和classForName都是用来加载类的,但是这两个方法一般却又在不同的场景使用。    如classLoader一般是spring容器用来加载bean的时候使用的,而classForName一般我们都是在使用数据库驱动的时候会使用该方法。  2.了解了两个加载类的不同场景之外后,先看一下类加载的过程。 2.1 .class文件首先被加载到j...

qq_35151346的博客 2121

[STM32H750]HAL库下FMC驱动正点原子MCU屏的移植与优化

本文详细介绍了在STM32H750平台上使用HAL库移植与优化正点原子MCU屏幕驱动的完整过程。重点解析了FMC硬件配置、Cache一致性处理、精确延时实现等关键技术难点,提供了实用的移植方案和性能优化技巧,帮助开发者高效解决屏幕显示问题。

rock5的博客 286

【Java面试】反射中,Class.forName和classloader的区别是什么?

Java中为什么要使用forName对jdbc的Driver进行加载呢?

Zhangsama1的博客 2521

AI原生应用在UGC内容审核中的实战经验

AI原生应用(AI-Native Application)——以机器学习模型为核心驱动力,深度整合数据、算法、工程架构的完整系统——为破解这一三角难题提供了全新范式。全链路数据驱动:从数据采集、模型训练到决策优化,形成闭环自治系统,无需人工规则干预多模态深度理解:同时处理文本、图像、音频、视频等多类型内容,理解语义而非简单匹配特征自适应进化能力:通过人机协同反馈持续学习新型违规模式,模型周级迭代成为常态审核效率提升300%:单条视频审核耗时从2.3秒降至0.7秒。

AI算力网络与通信的博客 1149

FOC控制必看:单/双/三电阻电流采样方案全对比(附NXP实战避坑指南)

本文深入对比了FOC控制中单电阻、双电阻和三电阻电流采样方案的优劣与适用场景,重点剖析了采样时序、窗口与ADC转换的工程挑战。针对NXP平台,提供了解决采样窗口过窄的实战方案与配置指南,帮助工程师根据成本与性能需求做出最优选择,并规避常见设计陷阱。

n2o3p4的博客 413

Classloader中loadClass()方法和Class.forName()区别

Classloader中loadClass()方法和Class.forName()都能得到一个class对象,那这两者得到的class对象有什么区别呢 1、java类装载的过程 Java类装载有三个步骤: 装载:通过累的全限定名获取二进制字节流,将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lang.class对象; 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;   校验:检查导入类或接口的二进制数据的正确性;(文件格式验证,元数据验证,字节码验证,

he15101042018的博客 1448

大疆 DJI Mobile SDK实战指南——从零构建Android示例开发环境

本文提供了一份详尽的DJI Mobile SDK Android开发环境搭建实战指南。文章手把手教你从注册开发者账号、获取App Key,到配置Android Studio、下载官方示例代码,最终成功运行DJI官方Android示例程序,帮助开发者快速入门无人机应用开发,避开常见编译与依赖问题。

weixin_29188043的博客 274

Class.forName()与ClassLoader.loadClass()在Java反射中的区别

在Java中,Class.forName()和ClassLoader.loadClass()两个方法都被用于动态加载类,但它们在行为和使用场景上存在一些重要的区别。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 5645

PCB板设置20H 原则理解

20H原则是PCB设计中抑制EMI辐射的关键方法,要求电源层比相邻地层内缩20倍介质厚度(20H)。在四层板中实现20H原则需采用S-G-P-S层叠结构,确保GND与PWR紧邻。具体步骤包括:确定GND-PWR间介质厚度H,计算20H值(通常80-120mil),并在设计软件中将电源层四周内缩20H,同时保持地层完整不内缩。注意避免常见误区,如混淆介质厚度、地层内缩等。该原则能有效限制边缘场辐射,降低EMI干扰,是四层板EMC设计的重要规范。

qq_37999850的博客 693

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ClassLoader.loadClass()与Class.forName()的区别

1.Class.forName 先直接上源码 @CallerSensitive public static Class<?> forName(String className) throws ClassNotFoundException { Class<?> caller = Reflection.getCallerClass(); return forName0(className, true, ClassLoader.getClassLo

代码大师麦克拉瑞的博客 892

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

反射中Class.forName()和ClassLoader.loadClass()的区别

本文参考反射中Class.forName()和ClassLoader.loadClass()的区别Java类加载过程 加载:找到.class文件并把这个文件包含的字节码加载到内存中 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;   校验:检查导入类或接口的二进制数据的正确性;(文件格式验证,元数据验证,字节码验证,符号引用验证)   准备:给类的静态变量分配并初始化存储空间;

upxiaofeng的专栏 647

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Class.forName()和ClassLoader.loadClass()有何区别

有人问了关于Class.forName()和ClassLoader.loadClass()有何区别的问题,觉得很有意思,便翻了下Class和ClassLoader相关的源码,其中Class源码中关于forName()的方法如下所示: @CallerSensitive public static Class<?> forName(String className) ...

qq_21364629的博客 142

Class.forName() 与 ClassLoader.loadClass() 的区别

Class.forName() 的方式加载类时,默认会执行类的初始化。ClassLoader.loadClass() 的方式加载类时,类不会被初始化,只有显式调用加载的类时才会进行初始化。采用 ClassLoader 进行懒加载,不会调用类的 static 代码块,实现延迟加载。

JellyfishMIX 的博客 795

class.forName()和ClassLoader.loadClass()的区别

Class.forName()执行初始化过程 执行静态代码化。 ClassLoader.loadClass()不执行初始化过程。

qq_36932982的博客 484

简单总结Class.forName("").newinstance()和new()以及classLoader.loadClass("")的区别

文章目录背景三种方法简单介绍Class.forName("").newinstance()方式new方式classLoader.loadClass("")方式三种方法的区别加载的时机可能不同Class.forName(className)和ClassLoader.loadClass(className)的区别独特的new加载时机类加载器不同...

as403045314的博客 1430

JavaCore 【 Java中的Class.forName()和ClassLoader.loadClass()的区别】

类装载顺序 类加载过程 Class.forName()和ClassLoader.loadClass 对比 Class.forName(className)方法,内部实际调用的方法是Class.forName(className,true,classloader); 第2个boolean参数表示类是否需要初始化, Class.forName(className)默认是需要初始化。 一旦初始化...

半 岛 码 农 的 博 客 592
上一篇: Spring AOP 中@Pointcut的用法
下一篇: sql优化
冷down
博客等级 码龄10年 11粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值