反射获取成员变量并使用
Posted pxy-1999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射获取成员变量并使用相关的知识,希望对你有一定的参考价值。
Field[] getFields() 返回包含一个数组Field对象反射由此表示的类或接口的所有可访问的公共字段类对象。
public class ReflectDemo01 { public static void main(String[] args) throws ClassNotFoundException { //获取Class对象 Class<?> c = Class.forName("com.reflect_02.Student"); //Field[] getFields() //返回包含一个数组 Field对象反射由此表示的类或接口的所有可访问的公共字段类对象。 Field[] fields = c.getFields(); for (Field field : fields){ System.out.println(field); } } }
该方法运行结果
Field[] getDeclaredFields() 返回的数组Field对象反映此表示的类或接口声明的所有字段类对象。
public class ReflectDemo01 { public static void main(String[] args) throws ClassNotFoundException { //获取Class对象 Class<?> c = Class.forName("com.reflect_02.Student"); //Field[] getDeclaredFields() //返回的数组Field对象反映此表示的类或接口声明的所有字段类对象。 Field[] fields = c.getDeclaredFields(); for (Field field : fields){ System.out.println(field); } } }
该方法的运行结果:
获取单个公共访问权限的成员变量的对象的方法
公共对象:Field getField(String name) 返回一个Field对象,它反映此表示的类或接口的指定公共成员字段类对象。
先通过getConstructor()方法来获取构造方法,然后通过 构造方法.newInstance()方法来创建对象,通过getField()方法来获取成员变量,最后通过set()方法来为成员变量赋值,set赋值给的是构造方法所创建的对象的成员变量。
public class ReflectDemo01 { public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { //获取Class对象 Class<?> c = Class.forName("com.reflect_02.Student"); //Field getField(String name) //返回一个Field对象,它反映此表示的类或接口的指定公共成员字段 类对象。 Constructor<?> con = c.getConstructor(); Object obj = con.newInstance(); Field addressField = c.getField("address"); addressField.set(obj,"西安"); //给obj的成员变量address赋值为 西安 System.out.println(obj); } }
获取单个任意访问权限的成员变量的对象的方法:
Field getDeclaredField(String name) 返回一个Field对象,它反映此表示的类或接口的指定已声明字段类对象。
同样,在获取私有访问权限时,需要取消访问检查
1 public class ReflectDemo01 { 2 public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { 3 //获取Class对象 4 Class<?> c = Class.forName("com.reflect_02.Student"); 5 6 Constructor<?> con = c.getConstructor(); 7 Object obj = con.newInstance(); 8 9 //Field getDeclaredField(String name) 10 //返回一个 Field对象,它反映此表示的类或接口的指定已声明字段 类对象。 11 Field nameFiled = c.getDeclaredField("name"); 12 nameFiled.setAccessible(true); 13 nameFiled.set(obj,"林青霞"); 14 System.out.println(obj); 15 } 16 }
以上是关于反射获取成员变量并使用的主要内容,如果未能解决你的问题,请参考以下文章