Java反射机制详解(一)

Java反射机制详解(一)

第一节主要讲解反射机制的理解以及反射机制的应用:

1.反射(Reflection)的概念

1.1 反射的出现背景

Java程序中,所有的对象都有两种类型:编译时类型运行时类型,而很多时候对象的编译时类型和运行时类型不一致

例如:某些变量或形参的声明类型是Object类型,但是程序却需要调用改对象运行时类型的方法,该方法不是Object中的方法,那么该如何解决呢?

解决这个问题,有两种解决方案:

方案1:在编译和运行时都完全知道类型的具体信息,在这种情况下,我们可以直接先使用instanceof运算法进行判断,再利用强制类型转换将其转换成运行时类型的变量即可。

方案2:编译时无法预知该对象和类的真实信息,程序只能依靠运行时信息来发现该对象和类的真实信息,这时候就必须使用反射。例:Object obj=new String("hello");。例子中obj变量在编译时是Object类型,但是在运行时,确实String类型,如果我们想要获取obj的运行时类型的话,就可以采用:obj.getClass();

1.2 反射概述

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在运行期间借助Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息,我们可以通过这个对象看到类的结构。

这个Class对象就像一面镜子,透过这个“镜子”看到类的结构,所以,我们形象地称之为:反射

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RqDAQA0q-1688544212869)(D:\Java学习\01_课件与电子教材\尚硅谷_第17章_反射机制\images\image-20220417161529285.png)]

从内存加载上看反射:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ux9qvg33-1688544212870)(D:\Java学习\01_课件与电子教材\尚硅谷_第17章_反射机制\images\image-20220524101441695.png)]

1.3 Java反射机制研究及应用

Java反射机制提供的功能:

  • 在运行时判断任意一个对象所属的类:
  • 在运行时构造任意一个类的对象:
  • 在运行时判断任意一个类所具有的成员变量和方法:
  • 在运行时获取泛型信息:
  • 在运行时调用任意一个对象的成员变量和方法:
  • 在运行时处理注解:
  • 生成动态代理:

1.4 反射相关的主要API

java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器

… …

1.5 反射的优缺点

  • 优点
    • 提高了Java程序的灵活性和扩展性,降低了耦合性,提高自适应能力。
    • 允许程序创建和控制任何类的对象,无需提前硬编码目标类。
  • 缺点
    • 反射的性能较低:反射机制主要应用于对灵活性和扩展性要求很高的系统框架上,日常的业务开发上很少用到。
    • 反射会模糊程序代码的内部逻辑,导致代码可读性较差。

和扩展性要求很高的系统框架上,日常的业务开发上很少用到。

  • 反射会模糊程序代码的内部逻辑,导致代码可读性较差。

注:关于Java的反射机制讲解,我将拆分成五个小节进行叙述,分为:1、反射的概念;2、理解Class类并代码实现多种方法获取Class实例;3、类的加载与ClassLoader的理解;4、反射的基本应用第一节;5、反射的基本应用及体会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java丶Sunday

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值