反射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);
    }
}
相关推荐
写代码的【黑咖啡】1 小时前
Python 中的 Requests 库:轻松进行 HTTP 请求
开发语言·python·http
BD_Marathon1 小时前
MyBatis各种查询功能
java·开发语言·mybatis
栗子叶1 小时前
Spring 中 Servlet 容器和 Python FastAPI 对比
python·spring·servlet·fastapi
研☆香1 小时前
JavaScript 特点介绍
开发语言·javascript·ecmascript
Howrun7771 小时前
虚幻引擎_AController_APlayerController_AAIController
开发语言·c++·游戏引擎·虚幻
雪人.2 小时前
Spring常见面试题(2026版30道面试题)
java·后端·spring
温暖小土2 小时前
深入理解 Spring Boot 配置加载顺序:外部化配置的艺术
java·springboot
曹牧2 小时前
C#:ToDouble
开发语言·c#
小林rr2 小时前
深入探索 C++:现代特性、工程实践与性能优化全解
java·c++·性能优化
袁袁袁袁满2 小时前
Python读取doc文件打印内容
开发语言·python·python读取doc文件