JAVA反射机制原理中的字节码与类Class

本文深入解析Java反射机制,详细阐述如何通过反射获取类中的构造函数、普通方法和字段,并提供了实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


这篇文章是我在论坛回答一个帖子时写的,这里再细述下。所谓的反射就是,把一个类中的字段(变量)、方法、构造函数等,给它取出来再放到一个个类中
举个例子:

public class Animal
{
    //字段
   private String name;
   private String address;
   private int age;
   private int id;
   private boolean sex;
   ........
   //构造函数
   Animal(int age,String name,boolean sex){//具体实现省略}
   Animal(int age,int id,boolean sex){//具体实现省略}
   Animal(int age,String address,boolean sex){//具体实现省略}
   Animal(int age,String name,int id){//具体实现省略}
   .................
   //方法
   public void method1(int x,int y){//具体实现省略}
   public int  method1(String a,int b){//具体实现省略}
   public String method1(boolean zz,String vv){//具体实现省略}
   public boolean method1(){//具体实现省略}
   public double method1(int www){//具体实现省略}
   ..........
}


上面这个类有很多方法
那么可以用 Concustor  这个类表示 Animal 这个类中的所有构造函数
那么可以用 Method 这个类表示 Animal 这个类中的所有普通方法
那么可以用 Field 这个类表示 Animal 这个类中的所有字段


就是说把一个类中的共有属性抽出来,再放到一个类中!

最后说了,要先理解字节码和Class这个类

字节码:
eclipse等软件编写的.java文件叫源文件,一点击保存(其实就调用了javac.exeeclipse就编译了.java文件------>生成.class文件
当你运行的时候是这样的(java.exe----->JVM------>.class文件翻译成字节码文件,这时候一个.class文件的字节码就加载到了计算机的内存中了)
图解一下

Class类:
人(Person)是一个类
汽车(Car)是一个类
植物(Plant)是一个类
............................
那么人、汽车、植物.............是不是也是也可以归为一个类来管理呢
这个类就是Class
接着人啊、汽车啊、植物啊.............每个类中里面是不是有字段、构造方法、普通方法.....................那么他们是不是也可以归为一个类呢
Field-------->对应每个类的字段(例如Personnameageaddress......
Constructor------>对应每个类中的构造函数
Method------>对应每个类的普通方法
xxx-------->对应每个类的xxx

怎么把一个类中的字段、构造函数、方法抽取出来放到FieldConstructorMethod里面呢?
这就用到了反射了!!!!嗯!!!
每个.class文件(Person.class)加载到JVM的时候在内存中都有一个字节码文件:(给它取个名字,是Class的引用)
Class  person=Person.class(这里获得字节码有三种方式,具体看图


这时就可以用person这个对象调用Class这个类中的方法了

什么person.getConstructor参数.....)------->获取到Person类的一个构造函数,引用类型是Constructor

什么person.getField(参数......);--------->获取Person类的某一个字段,引用类型是Field
什么person.getMethod(参数......)--------->获取Person类的某一个普通方法,引用类型是Method

又或者,你想取出这个类中所有的构造方法、字段、普通方法:

Constructor[]   constructors=person.getConstructors();

Field[]   fields=person.getFields();

Method[]    methods=person.getMethods();

然后在用for循环的方式,对constructorsfieldsmethods进行遍历。



这篇文章是怎么具体使用反射: JAVA高新技术反射机制的原理之构造函数、普通方法和字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值