基础到源码一套搞定,清华学霸最新整理的Java反射学习笔记太全了

Hello,今天给各位童鞋们分享的是Java反射,赶紧拿出小本子记下来吧

image.png

1.反射介绍

1.1 什么是反射

Java 反射机制是 Java 语言一个很重要的特性,它使得 Java 具有了“动态性”。在 Java程序运行时,对于任意的一个类,我们能不能知道这个类有哪些属性和方法呢?对于任意的一个对象,我们又能不能调用它任意的方法?答案是肯定的!这种动态获取类的信息以及动态调用对象方法的功能就来自于 Java 语言的反射(Reflection)机制。

1.2 反射的作用

简单来说两个作用,RTTI(运行时类型识别)和 DC(动态创建)。我们知道反射机制允许程序在运行时取得任何一个已知名称的 class 的内部信息,包括其 modifiers(修饰符),fields(属性),methods(方法)等,并可于运行时改变 fields 内容或调用methods。那么我们便可以更灵活的编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现等等;但是需要注意的是反射使用不当会造成很高的资源消耗!

Java 反射机制是 Java 语言一个很重要的特性,它使得 Java 具有了“动态性”。

反射机制的优点:

  1. 更灵活。

  2. 更开放。

反射机制的缺点:

  1. 降低程序执行的效率。

  2. 增加代码维护的困难。

2. 创建对象过程

2.1 创建 Java 对象的三个阶段

image.png

2.2 创建对象时内存结构

image.png

实际上,我们在加载任何一个类时都会在方法区中建立“这个类对应的 Class 对象”,由于“Class 对象”包含了这个类的整个结构信息,所以我们可以通过这个“Class 对象”来操作这个类。

我们要使用一个类,首先要加载类;加载完类之后,在堆内存中,就产生了一个 Class 类型的对象(一个类只有一个 Class 对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象知道类的结构。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
这个对象就像一面镜子,透过这个镜子可以看到类的结构,所以,我们形象的称之为:反射。 因此,“Class 对象”是反射机制的核心。

3. 反射的具体实现

3.1 获取 Class 对象的三种方式

通过 getClass()方法。

通过.class 静态属性。

通过 Class 类中的静态方法 forName()

3.1.1 创建Users类

image.png

image.png

3.1.2 通过 getClass()方法获取 Class 对象

image.png

3.1.3 通过.class 静态属性获取 Class 对象

image.png

3.1.4 通过 forName()获取 Class 对象

image.png

3.2 获取类的构造方法

image.png

3.2.1 修改Users类

image.png

3.2.2 获取构造方法

image.png

3.2.3 通过构造方法创建对象

image.png

3.3 获取类的成员变量

image.png

3.3.1 获取成员变量

image.png

3.3.2 操作成员变量

image.png

3.4 获取类的方法

image.png

3.4.1 修改Users类

image.png

3.4.2 获取方法并调用

image.png

4. setAccessible 方法

setAccessible()方法:

setAccessible 是启用和禁用访问安全检查的开关。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查;默认值为 false。

由于 JDK 的安全检查耗时较多,所以通过 setAccessible(true)的方式关闭安全检查就可以达到提升反射速度的目的。

image.png

好啦,今天的文章就到这里了,希望能够帮助到屏幕前迷茫的你们

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值