什么是反射?##
先谈谈java程序的运行步骤吧! 先编译后运行对吗?
其实你想一想, 你写的java代码机器真的能认识吗? 早在以前就听过了吧机器是只认识0和1的
**所以编译这一阶段也就是将java文件编译成字节码文件也就是.class文件 **
那什么又是反射呢?
我现在觉得反射就是拿到它的字节码文件,对字节码文件做操作
字节码文件
我先举个例子什么叫做字节码文件
怎么样 刺不刺激 你也可以对着写下来放在text文件中 后缀改成.class 文件 然后看看他运行的结果是什么
应该是hello world
一大串我们看不懂的01编码 但是java的开发者们应该是通过某一种编码方式开发了java语言
其实你可以想一想 真正机器能识别的就是这个字节码文件 如果你知道了这种编码方式 你是不是其实也可以改这个运行结果呢?
不通过java代码改 直接改class文件 比如把输出的hello wolrd 改成 hello java 可能比较复杂
因为我自学的时间也只有2个月左右 所以帮不到大家 还是回归正题
字节码文件的大致介绍
这一套编码方式 你可以去找找看 应该可以找到
这里面都会加载一些什么 比如 这么多字节码文件会加载你的class_info 也就是类的信息
你看一下第一个cafe babe 你可以查一下 他代表着你这个类是 class类型
然后后面的01码基本上就是 常量池的索引 或者字段信息 方法信息 父类的信息 初始化也就是构造器的信息
当然 我们自然是看不懂 机器能看懂 可能开发者们也能看懂
反射
回到了正题
我们java 的类加载器 在第一次访问一个类的时候 肯定要把他的类信息加载到jvm里面
只要一加载进来我是不是就可以拿到字节码文件了
我只要拿到了字节码文件 如果我会编码的方式 我是不是可以直接改编码
所以反射就是干这样的一个事情 我直接拿你字节 直接改的字节
得到Class文件的三种方式
把这字节码文件封装成一个类