Java反射的概念知识

1、什么是反射?

答:通过程序来访问任意类的能力

 

2、为什么使用反射创建对象 的效率 小于(<) 直接new()对象?

答:1)反射调用会进行一系列安全性校验

2)反射需要调用一系列的native方法来实现

3)寻找Class字节码的过程,比如通过ClassName找到对应的字节码Class,然后进行加载、解析,也会比较慢,而new的方式则无需寻找,因为在Linking的解析阶段已经将符号引用转为了直接引用

 

Class<?> aClass = Class.forName("全路径") 了什么?  -》找到字节码文件 —》 加载字节码文件 (类加载机制) - 加载到运行时数据区域(产生一个Class类型的对象) psClass的对象,并不是Class类型的实例,也就是说并不是普通的对象

native方法的调用forName0( className , true , ClassLoader.getClassLoader(caller) , caller);

User user= (User)aClass.newInstance(); //这一步之后才是咱们说的普通的对象

 

New 的关键字,是不需要这么过程的,所以性能比较高

 

3、类加载机制 ClassLoad

答:装载(Load)-> 连接(Link -> 验证veirly、准备、解析) -> 初始化Initialize -> 使用Use -> 卸载Unload

 

 

4、符号引用和直接引用?

答:略长比较麻烦,自行查找吧

 

5、clazz.newInstance() 的本质是什么?

答:从两个层面来看

Jdk层面:Constructor.newInstance()

Jvm层面:instanceKlass() -> instanceOopDesc -> OopDesc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值