📜  Java中的类 getField() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:32:01.875000             🧑  作者: Mango

Java中的getField()方法及示例

在Java中,我们可以使用Class类提供的getField()方法获取类中定义的公共成员变量(即属性)。getField()方法返回一个Field对象,该对象包含有关属性的信息,如属性类型、修饰符等。

getField()方法的语法

getField()方法的语法如下所示:

public Field getField(String name) throws NoSuchFieldException, SecurityException

其中,name参数是要获取的属性的名称。

使用示例

假设有以下Java类:

public class Student {
    public String name;
    private int age;
    protected String gender;

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

    public void study() {
        System.out.println(name + "正在学习...");
    }

    private void sleep() {
        System.out.println(name + "正在睡觉...");
    }

    protected void eat() {
        System.out.println(name + "正在吃饭...");
    }
}

我们可以使用以下代码来获取Student类中的公共属性:

import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws NoSuchFieldException, SecurityException {
        Field[] fields = Student.class.getFields();
        for (Field field : fields) {
            System.out.println(field.getName());
        }
    }
}

输出结果为:

name
gender

可以看到,输出结果中只包含了namegender两个属性,因为它们是公共属性(即使用public关键字修饰的属性)。

如果我们想获取Student类中的所有属性,包括私有和受保护的属性,可以使用以下代码:

import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws NoSuchFieldException, SecurityException {
        Field[] fields = Student.class.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field.getName());
        }
    }
}

输出结果为:

name
age
gender

可以看到,输出结果中包含了所有的属性,包括公共、私有和受保护的属性。

如果我们想获取某个具体的属性,如Student类中的age属性,可以使用以下代码:

import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws NoSuchFieldException, SecurityException {
        Field ageField = Student.class.getDeclaredField("age");
        System.out.println(ageField.getName());
    }
}

输出结果为:

age

可以看到,输出结果中只包含了age属性。

注意事项
  • getField()方法只能获取公共属性,如果要获取其他类型的属性,如私有属性或受保护的属性,需要使用getDeclaredFields()方法。如果要获取某个具体的属性,也需要使用getDeclaredField()方法。
  • 如果要获取属性的值,可以使用Field类提供的get()方法或set()方法。示例代码留给读者自行实现。