一文把Java反射说的明明白白,清清楚楚,记得点赞关注,距离架构师的小目标又进一步

【摘要】 目录
1、反射的概念
1、概念
2、获取字节码文件对象的方式
2.1 元数据的概念
2.2 获取class对象的方式
3、反射如何获取元数据并访问
1、访问权限
2、获取方法
2.1 访问静态方法
2.2 访问类方法
3、获取字段,读取字段的值
4、获取实现的接口
5、获取构造函数,创建实例
6、获取继承的父类
7、获取注解
4、反射实例
5…

目录

1、反射的概念

1、概念

2、获取字节码文件对象的方式

2.1 元数据的概念

2.2 获取class对象的方式

3、反射如何获取元数据并访问

1、访问权限

2、获取方法

2.1 访问静态方法

2.2 访问类方法

3、获取字段,读取字段的值

4、获取实现的接口

5、获取构造函数,创建实例

6、获取继承的父类

7、获取注解

4、反射实例

5、总结


图片

今天有时间没加班回家来好好写一篇文章,反射是Java里比较高级的概念了,一般在书的后半部分。反射也是写框架的必备技能,反射很重要,现在仍然记得刚毕业的一两年一直没有搞懂反射是什么。今天就讲讲反射,希望这篇文章能帮有同样疑惑的你解开疑团,废话不多说,让我们开始吧。

1、反射的概念

1、概念

反射,指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对任意一个对象,都能调用它的任意一个方法。这种动态获取信息,以及动态调用对象方法的功能,叫做java语言的反射机制。反射很强大,有优点也有缺点。

优点:灵活性高。因为反射属于动态编译,即只有到运行时才动态创建 &获取对象实例。

缺点:执行效率低。

2、获取字节码文件对象的方式

2.1 元数据的概念

元数据(metadata):元数据是指用来描述类的数据,就是class的代码数据。所有的class文件加载到虚拟机之后都会被构建成class对象,class对象描述了一个类都有哪些东西,大家都知道的实现的接口,继承的抽象类,成员变量,类变量,成员方法,类方法,静态方法等,这个class对象就是元数据。

  • Class类:代表一个类。

  • Field类:代表类的成员变量(成员变量也称为类的属性)。

  • Method类:代表类的方法。

  • Constructor类:代表类的构造方法。

图片

2.2 获取class对象的方式

  • 2.2.1 通过对象获得,因为任何对象都必须和class对象关联

  • 2.2.2 通过类对象直接获得

  • 2.2.3 通过类加载器获得,因为类加载器读取class文件会返回class对象

    即将用来反射的对象(随便定义的一个对象,只是为了演示)


    package org.pdool.reflect;
    /**
    * @author 香菜
    */

    public class Npc {
    // 静态field
    public static int NPC_TYPE_1 = 1;
    // 私有成员变量
    private int npcType;
    // 共有成员变量
    public String name;
    // 无参构造函数
    public Npc() {
    }
    // 有参构造函数
    public Npc(int npcType, String name) {
    this.npcType = npcType;
    this.name = name;
    }
    public int getNpcType() {
    return npcType;
    }
    public void setNpcType(int npcType) {
    this.npcType = npcType;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    // 静态方法
    public static void sayHello(String word){
    System.out.println("hello " + word);
    }
    }

    © 版权声明
    THE END
喜欢就支持一下吧
点赞0 分享