java.lang.reflect.Field
java.lang.reflect.Field
一、Field类是什么
Field是一个类,位于java.lang.reflect包下。
在Java反射中 Field类描述的是 类的属性信息,通俗来讲 有一个类如下:
1 package com.testReflect; 2 public class FieldDemo { 3 public int num1 = 1; 4 protected int num2 = 2; 5 int num3 = 3; 6 private int num4 = 4; 7 8 public String s1 = "a"; 9 protected String s2 = "b"; 10 String s3 = "c"; 11 private String s4 = "d"; 12 }
在Java反射中FieldDemo类中的属性: num1、num2、num3、num4 都是Field类的实例,这个Field类的实例描述了属性的全部信息。(包括:属性名称、属性类型、属性修饰符、属性注解 等等)
二、如何获取Field类对象
一共有4种方法,全部都在Class类中:
- getFields(): 获取类中public类型的属性
- getField(String name): 获取类特定的方法,name参数指定了属性的名称
- getDeclaredFields(): 获取类中所有的属性(public、protected、default、private),但不包括继承的属性。
- getDeclaredField(String name): 获取类特定的方法,name参数指定了属性的名称
三、Field类中常用的方法
对于类中的属性,我们常用的操作:获取属性的值、修改属性的值。
1 package com.testReflect; 2 3 import java.lang.reflect.Field; 4 import java.lang.reflect.Modifier; 5 6 public class FieldTest { 7 public static void main(String[] args) throws Exception { 8 //使用反射第一步:获取操作类FieldDemo所对应的Class对象 9 Class<?> cls = Class.forName("com.testReflect.FieldDemo"); 10 //使用FieldDemo类的class对象生成 实例 11 Object obj = cls.newInstance(); 12 13 //通过Class类中getField(String name): 获取类特定的方法,name参数指定了属性的名称 14 Field field = cls.getField("num1"); 15 16 //拿到了Field类的实例后就可以调用其中的方法了 17 18 //方法:getModifiers() 以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符 19 System.out.println("修饰符: " + Modifier.toString(field.getModifiers())); 20 21 //方法:getType() 返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型 22 System.out.println("类型: "+field.getType()); 23 24 //方法:get(Object obj) 返回指定对象obj上此 Field 表示的字段的值 25 System.out.println("属性值: "+field.get(obj)); 26 27 //方法: set(Object obj, Object value) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值 28 field.set(obj, 55); 29 System.out.println("修改属性值后 --> get(Object obj): "+field.get(obj)); 30 } 31 }