反射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);
    }
}
相关推荐
小小de风呀1 分钟前
de风——【从零开始学C++】(二):类和对象入门(一)
开发语言·c++
浅念-1 分钟前
LeetCode 模拟算法:用「还原过程」搞定编程题的入门钥匙
开发语言·c++·学习·算法·leetcode·职场和发展·模拟
天码-行空3 分钟前
深入拆解Tomcat架构:多层容器设计原理
java·架构·tomcat
澈2073 分钟前
C++面向对象编程:从封装到实战
开发语言·c++
巨量HTTP5 分钟前
Python 获取动态 iframe 内容(完整解决方案)
开发语言·python
minji...10 分钟前
Linux 网络套接字编程(三)UDP服务器与客户端实现:Windows与Linux通信,新增字典翻译功能的 UDP 通信
linux·服务器·开发语言·网络·windows·算法·udp
人道领域14 分钟前
【Redis实战篇】秒杀系统:一人一单高并发实战(synchronized锁实战与事务失效问题)
java·开发语言·数据库·redis·spring
0xDevNull18 分钟前
Spring中统一异常处理详细教程
java·开发语言·后端
one_love_zfl18 分钟前
java面试-spring篇
java·spring·面试