反射和类加载器

本文探讨了Java中的反射机制,以及它与类加载器的关系。反射允许在运行时动态获取类的成员和方法。类加载器根据类的全限定名加载class文件,若找不到则抛出ClassNotFound异常。不同的类加载器加载的类互不可见,形成独立的命名空间。通过GetCallerClass()方法可以获取发起反射请求的类,并使用@CallerSensitive注解帮助定位真正请求者。类加载过程中,MethodAccessorGenerator.generate()函数生成并定义类,完成反射加载流程。
摘要由CSDN通过智能技术生成

转载请注明:http://blog.csdn.net/hel_wor/article/details/50375054

当初看了几本书后因为觉得反射,多态,动态链接有共同的地方,所以对底层有了好奇。

终于能动手写这篇博客了,前前后后的逻辑感觉能走通了。
反射是在运行期动态的获取某个类的成员和方法。
反射和类加载器的关系,即是我们在反射调用某个类时,这个类会被类加载器加载一次,第一个问题,如何去加载这个类,第二个问题,谁来加载这个类。

加载的这个类时通过加载这个类的class文件完成的,要找到这个class文件,我们需要这个类的名字,在java虚拟机规范中有提到这个名字是class的二进制名称。二进制名称也叫全限定名,其命名逻辑和电脑本地上某个文件的路径类似,比如类加载器的二进制名称就为java/lang/ClassLoader。class文件的二进制名称被放在class文件常量池的Constant_Utf8_info结构中。如果没有找到这个二进制名称的class文件,则会报出ClassNotFound。

在之前的博客里提到过,出于安全原因,不同类加载器加载的类是不允许相互可见的,又相互引用关系的class文件会被同一类加载器加载,使它们可相互访问,也就是一个类加载器对应一个命名空间;由此,‘我’在经过反射调用对象N时,加载N的class文件的类加载器,即为加载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值