JAVA获取静态变量属性值的两种方法

JAVA获取静态变量属性值的两种方法

1,通过反射机制获取

/**
*  获取某个类的所有静态属性
*/
public static void getAllStaticField()throws ClassNotFoundException,IllegalAccessException{
    Class clazz = Class.forName("com.aoki.entity");
    Field[] declaredFields = clazz.getDeclaredFields();
    for (Field field : declaredFields) {
        field.setAccessible(true);
        if( Modifier.isStatic(field.getModifiers())){
            System.out.println(field.getName() + " , " + field.get(clazz));
        }
    }
}

2,不通过Class,使用Unsafe类获取静态属性的值

public class UnsafeMain {

    public static void main(String[] args) throws Exception {
        Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
        theUnsafe.setAccessible(true);
        Unsafe unsafe = (Unsafe) theUnsafe.get(null);
        // 这里必须预先实例化Person,否则它的静态字段不会加载
        Person person = new Person();
        Class<?> personClass = person.getClass();
        Field name = personClass.getField("UNAME");
        // 注意,上面的Field实例是通过Class获取的,但是下面的获取静态属性的值没有依赖到Class
        System.out.println(unsafe.getObject(unsafe.staticFieldBase(name), unsafe.staticFieldOffset(name)));
    }
}
@Data
public class Person {

    public static String UNAME= "ironman";
    public String Uage;
}

// 输出结果为
ironman
原创文章 2 获赞 2 访问量 696

猜你喜欢

转载自blog.csdn.net/GWQ_CY/article/details/106117611