详解Java的getDeclaredFields()方法:返回一个包含 Field 对象的数组

  • Post category:Java

我来详细讲解一下Java的getDeclaredFields()方法,该方法是Java反射机制中的一种方法,能够获取指定类的所有成员变量,包括公共、私有和受保护的字段。

方法概述

getDeclaredFields()方法的定义在Java官方文档中如下:

public Field[] getDeclaredFields()
           throws SecurityException

该方法返回的是一个Field对象数组,表示当前类声明的所有字段。该数组的元素包括所有的public、protected、default(包)访问控制的字段,但不包括父类中声明的字段。

方法使用

首先,需要通过Class类的forName()方法获取到需要操作的类的Class对象。然后,就可以调用getDeclaredFields()方法来获取该类定义的所有字段。

Class<?> cls = Class.forName("com.example.Person");
Field[] fields = cls.getDeclaredFields();

在上面的代码中,我们获取了Person类中定义的所有字段,存储在一个Field数组中。

示例1

接下来,我们来看一个示例,使用getDeclaredFields()方法获取一个类中的字段名和字段类型。

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) throws Exception {

        Class<?> cls = Class.forName("com.example.Person");
        Field[] fields = cls.getDeclaredFields();

        for (Field field : fields) {
            System.out.println(field.getName() + ": " + field.getType());
        }
    }
}

在这个示例中,我们定义了一个Person类,有两个私有成员变量name和age。在main方法中,我们使用forName()方法获取Person类的Class对象,然后调用getDeclaredFields()方法获取Person类中定义的所有字段,最后遍历这个Field数组,将每个字段的名称和类型打印出来。

运行程序,输出结果为:

name: class java.lang.String
age: int

示例中的输出结果表明,Person类中有两个字段,一个String类型的name和一个int类型的age。

示例2

接下来,我们再来看一个示例,使用getDeclaredFields()方法获取一个类的私有变量的值。

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class Main {
    public static void main(String[] args) throws Exception {

        Person person = new Person("Tom", 28);
        Class<?> cls = person.getClass();
        Field ageField = cls.getDeclaredField("age");

        ageField.setAccessible(true); // 允许访问私有变量
        int age = (int) ageField.get(person);

        System.out.println("Age: " + age);
    }
}

在这个示例中,我们定义了一个Person类,有两个私有成员变量name和age。在main方法中,我们首先创建了一个Person对象,并获取了它的Class对象。然后,我们使用getDeclaredField()方法获取age字段对象,并调用setAccessible()方法允许访问这个私有变量。最后,我们使用get()方法获取这个私有变量的值,并将其打印出来。

运行程序,输出结果为:

Age: 28

示例中的输出结果表明,获取私有变量的值成功。

以上就是关于Java的getDeclaredFields()方法的完整攻略,希望对您有所帮助。