反射4-反射获取成员变量

一、反射

1. 反射获取成员变量

反射获取成员变量 是Java反射机制的核心功能之一,它使程序在运行时能够动态访问和操作类的成员变量(包括私有变量),而无需在编译时知道具体的类结构。

通俗理解 :就像你有一个"代码透视镜",可以让你在程序运行时"看透"类的内部,直接访问和修改它的任何成员变量,包括那些被private修饰的私有变量。

java 复制代码
package com.lkbhua.MyreflectDemo3;

import java.lang.reflect.Field;

public class demo1 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
        /*
            Class类中用于获取成员变量的方法
                Field[] getFields()                        返回所有公共成员变量对象的数组
                Field[] getDeclaredFields()                返回所有成员变量对象的数组
                Field getField(String name)                返回单个公共成员变量对象
                Field getDeclaredField(String name)        返回单个成员变量对象

            Field类中用于获取成员变量属性的方法
                void set(Object obj,Object value)           赋值
                Object get(Object obj)                      获取值
        */

        // 1、获取class字节码文件的对象
        Class<?> clazz = Class.forName("com.lkbhua.MyreflectDemo3.Student");

        // 2、获取成员变量的对象
        /*
        Field[] fields = clazz.getFields();
        for(Field f : fields){
            System.out.println(f);
        }
        */
        System.out.println("--------------------------------------------------");

        // 获取单个的成员变量
        Field field = clazz.getField("name");
        System.out.println(field);

        // 获取权限修饰符
        int modifiers = field.getModifiers();
        System.out.println(modifiers);

        // 获取成员变量名
        String name = field.getName();
        System.out.println(name);

        // 获取成员变量的数据类型
        Class<?> type = field.getType();
        System.out.println(type);

        // 获取成员变量的值
        Student s = new Student("zhangsan", 18);
        Object value = field.get(s);
        System.out.println(value);

        // 修改对象里面记录的值
        field.set(s, "lisi");
        System.out.println(s);
    }
}
相关推荐
泡海椒6 小时前
PDF 表格样式优化:jquick-pdf 边框、圆角、背景色
java·开发语言·pdf
Beyond_System|系统之外7 小时前
【学编程】Python基础编程题100道(21-60)
开发语言·python·算法
景熙55237 小时前
15.Java 8 Stream 流入门到实战
java·开发语言·数据结构
wno7047 小时前
Spring Security权限控制
java·python·spring
杨运交8 小时前
[071][验证码模块]基于Spring拦截器的验证码认证设计思想
java·后端·spring
Geek-Chow8 小时前
CountDownLatch in Java
java
SL_staff9 小时前
从RBAC到场景化授权:《无忧·企业文档》三级权限模型的技术实践解析
java·开源·产品
传奇开心果编程10 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
SL_staff10 小时前
财务系统慎用低代码?从数据模型闭环看合规落地的技术实践
java·低代码·全栈
Bruce_Liuxiaowei10 小时前
Python 实例赋值遮蔽类属性:一个从不报错的静默陷阱
开发语言·python·语法糖