浅析java反射(字节码文件)

什么是反射?##


先谈谈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文件的三种方式


把这字节码文件封装成一个类

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值