java通俗易懂的了解反射

本文探讨了Java反射机制如何在运行时动态获取和操作对象,包括Class.forName和ClassLoader的区别,以及在Spring和MyBatis框架中的实际应用。同时揭示了反射的效率低和封装性破坏的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
反射机制是在程序运行状态中, 对于任意一个类, 都能够知道这个类的所有属性方法; 对于任意一个对象, 都能够调用它的任意一个属性方法。依靠此机制,可以动态的创建一个类的对象和调用对象的方法。常用的Api为Class.forName(完整包名)等等

优点就是增加灵活性,可以在运行时动态获取对象实例。
缺点是反射的效率很低,而且会破坏封装,通过反射可以访问类的私有方法,不安全。

框架中的运用:

Spring 框架的 IOC 基于反射创建对象和设置依赖属性。
mybatis框架通过读取sql,得到字段名称(与属性名相同),并用反射的方式将User对象创建出来,之后调用其set方法进行参数注入。最后放到List中

反射中,Class.forName 和 ClassLoader 区别?

这两者,都可用来对类进行加载。差别在于:

ClassforName(…) 方法,除了将类的 .class 文件加载到JVM 中之外,还会对类进行解释,执行类中的 static 块,进行类的初始化

ClassLoader 只干一件事情,就是将 .class 文件加载到 JVM 中,不会执行 static 中的内容,只有在 newInstance 才会去执行 static 块,不会进行类的初始化

Class.forName得到的class是已经初始化完成的
Classloder.loaderClass得到的class是还没有链接的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值