JAVA获取静态变量属性值的两种方法
1,通过反射机制获取
/**
* 获取某个类的所有静态属性
*/
public static void getAllStaticField()throws ClassNotFoundException,IllegalAccessException{
Class clazz = Class.forName("");
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