Java反射 - 字段

简介: 使用Java反射,您可以检查类的字段(成员变量)并在运行时获取/设置它们。 这是通过Java类java.lang.reflect.Field完成的。 本文将更详细地介绍Java Field对象。

使用Java反射,您可以检查类的字段(成员变量)并在运行时获取/设置它们。 这是通过Java类java.lang.reflect.Field完成的。 本文将更详细地介绍Java Field对象。 请记住也要检查Sun的JavaDoc。

获取字段对象

Field类是从Class对象中获取的。 这里是一个例子:

Class aClass = ...//获取一个class对象
Field[] fields = aClass.getFields();
AI 代码解读

Field []数组将为每个在类中声明的公共字段设置一个Field实例。

如果您知道要访问的字段的名称,则可以像这样访问它:

Class  aClass = MyObject.class
Field field = aClass.getField("someField");
AI 代码解读

上面的例子将返回Field实例对应的字段someField,如下面的MyObject所声明的:

public class MyObject{
  public String someField = null;

}
AI 代码解读

如果没有字段以getField()方法的参数形式存在,则抛出NoSuchFieldException。

字段名称

获得Field实例后,可以使用Field.getName()方法获取其字段名称,如下所示:

Field field = ... //obtain field object
String fieldName = field.getName();
AI 代码解读

字段类型

您可以使用Field.getType()方法确定字段的字段类型(String,int等):

Field field = aClass.getField("someField");
Object fieldType = field.getType();
AI 代码解读

获取和设置字段值

获得Field引用后,可以使用Field.get()和Field.set()方法来获取和设置其值,如下所示:

Class  aClass = MyObject.class
Field field = aClass.getField("someField");

MyObject objectInstance = new MyObject();

Object value = field.get(objectInstance);

field.set(objetInstance, value);
AI 代码解读

传递给get和set方法的objectInstance参数应该是拥有该字段的类的一个实例。 在上面的例子中,使用了MyObject的实例,因为someField是MyObject类的实例成员。

它是一个静态字段(public static ...),它传递null作为get和set方法的参数,而不是上面传递的objectInstance参数。

实战

package com.reflection.detail;

import java.lang.reflect.Field;

/**
 * Created by Fant.J.
 * 2018/2/7 14:51
 */
public class Reflection_Fields {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {

        //获取field对象
        Class aClass = People.class;
        Field[] fields = aClass.getFields();

        //如果你知道一些字段的名字,你可以这样获取到它
        Field field = aClass.getField("someField");
        System.out.println(field.getName()+"   "+field.getType());

        //那么,我们能获取到它的字段类型,那如何取出该字段的值呢
        People people = new People();
        Object obj = field.get(people);
        System.out.println(obj.toString());

        //如何给字段设置值呢
        field.set(people,"shuai");
        Object obj2 = field.get(people);
        System.out.println(obj2.toString());
    }
}

AI 代码解读

结果

someField   class java.lang.String
FantJ
shuai
AI 代码解读

项目代码:github链接

相关文章
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
|
4月前
|
Java的反射
Java的反射。
50 2
|
5月前
|
[Java]反射
本文详细介绍了Java反射机制的基本概念、使用方法及其注意事项。首先解释了反射的定义和类加载过程,接着通过具体示例展示了如何使用反射获取和操作类的构造方法、方法和变量。文章还讨论了反射在类加载、内部类、父类成员访问等方面的特殊行为,并提供了通过反射跳过泛型检查的示例。最后,简要介绍了字面量和符号引用的概念。全文旨在帮助读者深入理解反射机制及其应用场景。
71 0
[Java]反射
Java——反射&枚举
本文介绍了Java反射机制及其应用,包括获取Class对象、构造方法、成员变量和成员方法。反射允许在运行时动态操作类和对象,例如创建对象、调用方法和访问字段。文章详细解释了不同方法的使用方式及其注意事项,并展示了如何通过反射获取类的各种信息。此外,还介绍了枚举类型的特点和使用方法,包括枚举的构造方法及其在反射中的特殊处理。
117 9
Java——反射&枚举
🌟Java零基础-反射:从入门到精通
【10月更文挑战第4天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
68 2
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
java的反射与注解
java的反射与注解
40 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等