反射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);
    }
}
相关推荐
架构师沉默8 小时前
为什么国外程序员都写独立博客,而国内都在公众号?
java·后端·架构
带刺的坐椅8 小时前
SolonCode v2026.4.1 发布(比 ClaudeCode 简约的编程智能体)
java·ai·llm·agent·solon-ai·claudecode·soloncode
殷紫川8 小时前
从单体到亿级流量:登录功能全场景设计指南,踩过的坑全给你填平了
java
Filwaod8 小时前
Cursor+IDEA开发问题
java·idea·cursor
c++逐梦人8 小时前
C++11——— 包装器
开发语言·c++
爱丽_8 小时前
Spring 事务:传播行为、失效场景、回滚规则与最佳实践
java·后端·spring
zihao_tom9 小时前
Go环境搭建(vscode调试)
开发语言·vscode·golang
timi先生9 小时前
语料库全栈项目部署 (Vue + Java + CQPweb)
java·前端·vue.js
IT方大同9 小时前
(实时操作系统)线程管理
c语言·开发语言·嵌入式硬件
阿kun要赚马内9 小时前
Python面向对象:@property装饰器
开发语言·前端·python