反射不单可以对类中的方法进行解析,还可以对类的字段进行解析;
以下为我们要解析的Student类的源码:
Student类:
1 public class Student { 2 3 4 5 public static void study(){ 6 7 System.out.println( " 好好学习、天天向上! " ); 8 9 } 10 11 public int getSum( int a, int b){ 12 13 int sum = a + b; 14 15 return sum; 16 17 } 18 19 private void disPlay(String name, int age){ 20 21 System.out.println( " 解析中........ " ); 22 23 } 24 25 26 27 public static void main(String[] args) { 28 29 System.out.println( " 解析成功......... " ); 30 31 } 32 33 private String name; 34 35 private int age; 36 37 private int sex; 38 39 public String getName() { 40 41 return name; 42 43 } 44 45 public void setName(String name) { 46 47 this .name = name; 48 49 } 50 51 }
首先,先获得所有字段的名称:
1 @Test 2 3 public void test() throws Exception{ 4 5 // 1.加载类 6 7 Class clss = Class.forName( " JUnit01.Student " ); 8 9 // 2.创建类实例对象 10 11 Student student = (Student) clss.newInstance(); 12 13 // 3.解析属性 14 15 Field fds[] = clss.getDeclaredFields(); 16 17 18 19 for (Field f:fds){ 20 21 System.out.println(f.getName()); 22 23 } 24 25 }
Field是所获得字段的对象,以上代码执行的结果为:
name
age
sex
可以看到Student类中确实有者三个私有字段;
下面,要对name属性进行解析:
1 @Test 2 3 public void test01() throws Exception{ 4 5 // 1.加载类 6 7 Class clss = Class.forName( " JUnit01.Student " ); 8 9 // 2.创建实例对象 10 11 Student student = (Student) clss.newInstance(); 12 13 // 3.解析属性 14 15 Field f = clss.getDeclaredField( " name " ); 16 17 // 4.暴力反射 18 19 f.setAccessible( true ); 20 21 // 5.给所解析的属性赋值 22 23 f.set(student, " Lou_Wazor " ); 24 25 // 6.输出该属性的值 26 27 System.out.println(student.getName()); 28 29 30 31 32 33 String name = (String) f.get(student); 34 35 36 37 System.out.println(name + " ---- " ); 38 39 }
这里值得说下的是第五步的赋值方法为Field对象的set方法,获取字段值也可以通过解析类对象获得,也可以通过Field的取值方法来取值。
以上就是通过反射对类的字段进行解析,希望大家共同学习,希望有宝贵的评论。