java基础学习:java中的反射

2022-09-06 00:00:00 字段 对象 获取 方法 构造

一、什么是java反射#

什么是 java 的反射?

说到反射,写这篇文章时,我突然想到了人的”反省“,反省是什么?吾一日三省吾身,一般就是反思自身,今天做了哪些对或错的事情。

java 的反射,我觉得有同样的思想。当然 java 反射要“反思”的是 java 程序在运行时类自己的信息,它获取的信息就是它自身类的详细信息。

类的哪些详细信息呢?比如类或对象的成员变量、方法等。然后可以对这些信息加以修改,从而调整 java 的运行逻辑。

java 反射 API 提供了非常丰富的工具集,反射 API 能够获取对象的变量,方法等成员,从而可以动态的操纵 java 代码程序。文章后面会介绍这些反射 API(反射相关的类)的一些用法。

为什么反射能得到 java 程序运行时类的信息呢?这就要从 java 的虚拟机 jvm 说起。

二、虚拟机jvm加载文件#

Java虚拟机(Java Virtual Machine):用于执行编译后的 java 程序的虚拟容器。jvm 可以跨操作系统使用。

jvm 内部结构分为 3 部分:类加载器classload子系统、运行时数据区、执行引擎。

以 .java 结尾的文件是不能直接在 jvm 上运行,它必须通过 javac 编译为以 .class 为后缀结尾的字节码文件才能运行。

java 文件被编译为 .class 的文件后,java 文件中各种对象的信息就确定下来了,存在于 .class 文件里。通过 java 的反射就可以获取里面的信息。

三、反射原理简析#

在上一小节简单了解了文件加载内容,就是 java 文件经过编译后变成 .class 文件,类的各种信息就存储在 .class 文件中了,所以反射才能获取到类的各种信息。

java 代码编译为字节码的 .class 类文件,那 .class 文件里都有什么格式是什么?

class 文件结构采用类似 c 语言的结构体来存储数据。

Copy

相关文章