反射(通俗易懂)

目录

一、反射(Reflection)

二、反射学什么

三、获取Class对象的三种方式

四、获取类的构造器

4.1获取类的和构造器的作用:初始化对象然后返回

五、获取类的成员变量

5.1获取到成员变量的作用:赋值、取值

六、获取类的成员方法

6.1获取成员方法的作用:执行

七、反射作用,应用场景

八、案例


一、反射(Reflection)

  • 反射就是:加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)

  • 动态语言,是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。

  • 通俗点说就是在运行时代码可以根据某些条件改变自身结构。

二、反射学什么

  • 学习获取类的信息,进行操作

    • 反射第一步:加载类(字节码文件到内存中),获取类的字节码---Class对象

    • 获取类的构造器:Constructor 对象

    • 获取类的成员变量:Field对象

    • 获取类的成员方法:Method对象

三、获取Class对象的三种方式

  • Class c1 = 类名.class

  • 调用提供的方法:public static forName(String package)

  • Object提供的方法:public Class getClass();

    • Class c3 = 对象.getClass();

四、获取类的构造器

4.1获取类的和构造器的作用:初始化对象然后返回

五、获取类的成员变量

5.1获取到成员变量的作用:赋值、取值

六、获取类的成员方法

6.1获取成员方法的作用:执行

七、反射作用,应用场景

八、案例

package com.itheima.myreflect7;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;

/**
 * @author zhumq
 * @date 2024/7/1 23:43
 */
public class ObjectFrame {
    // 目标:能够保存任意对象的字段和字段数据到文件中
    public static void saveObject(Object obj) throws Exception {
        PrintStream ps = new PrintStream(new FileOutputStream("myreflec\\src\\data.txt", true));

        // obj 任意对象,到底有多少字段要保存
        Class c = obj.getClass();
        String cName = c.getSimpleName();
        ps.println("-------------------"+cName+"-------------------");
        // 从class对象中获取所有的字段
        Field[] fields = c.getDeclaredFields();
        // 便利每个字段
        for (Field field : fields) {
            // 获取字段名称
            String name = field.getName();
            // 禁止检查访问权限
            field.setAccessible(true);
            // 获取字段值
            Object value = field.get(obj);
            // 保存到文件中
            ps.println(name + "=" + value);
        }
        ps.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伏颜.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值