反射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);
    }
}
相关推荐
qq_448011162 小时前
C语言中的动态内存分配
c语言·开发语言·php
汉字萌萌哒2 小时前
2024CSP-J入门级C++真题详解
开发语言·c++
arbboter3 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
极创信息3 小时前
系统安全隐患全方位排查方案:标准化渗透测试全流程
java·opencv·struts·数据挖掘·eclipse·语音识别·hibernate
汉字萌萌哒4 小时前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++
叠层归一研究院4 小时前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi
喜欢的名字被抢了4 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
小雨笙笙4 小时前
C语言:变量三属性——存储类型
c语言·开发语言
数据知道4 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
果果燕5 小时前
C++ 学习笔记(二):类与对象—— 构造函数与析构函数
开发语言·c++