竹笋

首页 » 问答 » 常识 » 基础到源码一套搞定,清华学霸最新整理的J
TUhjnbcbe - 2022/8/16 8:59:00

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

1.反射介绍

1.1什么是反射

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

1.2反射的作用

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

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

反射机制的优点:

更灵活。更开放。反射机制的缺点:

降低程序执行的效率。增加代码维护的困难。2.创建对象过程

2.1创建Java对象的三个阶段

2.2创建对象时内存结构

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

我们要使用一个类,首先要加载类;加载完类之后,在堆内存中,就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象知道类的结构。这个对象就像一面镜子,透过这个镜子可以看到类的结构,所以,我们形象的称之为:反射。因此,“Class对象”是反射机制的核心。

3.反射的具体实现

3.1获取Class对象的三种方式

通过getClass()方法。

通过.class静态属性。

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

3.1.1创建Users类

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

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

3.1.4通过forName()获取Class对象

3.2获取类的构造方法

3.2.1修改Users类

3.2.2获取构造方法

3.2.3通过构造方法创建对象

3.3获取类的成员变量

3.3.1获取成员变量

3.3.2操作成员变量

3.4获取类的方法

3.4.1修改Users类

3.4.2获取方法并调用

4.setAccessible方法

setAccessible()方法:

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

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

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

1
查看完整版本: 基础到源码一套搞定,清华学霸最新整理的J