本教程演示了如何使用Java反射机制访问和修改类中不同访问权限的成员变量,包括公有、私有、受保护和默认(包)访问权限的成员变量,并展示了如何使用反射设置成员变量的初始值。

import java.lang.reflect.Field;

public class MyClass {
    // 公共访问权限限定符的基本类型成员变量
    public int publicInt;
    // 私有访问权限限定符的基本类型成员变量
    private double privateDouble;
    // 受保护访问权限限定符的引用类型成员变量
    protected String protectedString;
    // 默认(包)访问权限限定符的引用类型成员变量
    String defaultString;

    public static void main(String[] args) throws Exception {
        MyClass obj = new MyClass();

        // 获取类的所有成员变量
        Field[] fields = MyClass.class.getDeclaredFields();

        // 打印各个成员变量的初始值
        for (Field field : fields) {
            field.setAccessible(true);
            System.out.println(field.getName() + ': ' + field.get(obj));
        }

        // 重新设置各个成员变量的值
        for (Field field : fields) {
            field.setAccessible(true);
            if (field.getType().equals(int.class)) {
                field.setInt(obj, 10);
            } else if (field.getType().equals(double.class)) {
                field.setDouble(obj, 3.14);
            } else if (field.getType().equals(String.class)) {
                field.set(obj, 'Hello World');
            }
        }

        // 打印重新设置后的成员变量的值
        for (Field field : fields) {
            field.setAccessible(true);
            System.out.println(field.getName() + ': ' + field.get(obj));
        }
    }
}

上述代码定义了一个名为MyClass的类,包含了四种访问权限限定符的成员变量:publicInt是公共访问权限限定符的整型变量,privateDouble是私有访问权限限定符的双精度浮点型变量,protectedString是受保护访问权限限定符的字符串变量,defaultString是默认(包)访问权限限定符的字符串变量。

main方法中,使用反射的方式遍历类的所有成员变量,并打印它们的初始值。然后,通过反射重新设置各个成员变量的值,并再次打印它们的值,展示了如何使用反射的方式修改成员变量的值。

Java反射:访问和修改私有成员变量

原文地址: http://www.cveoy.top/t/topic/TRF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录