Logo

郎哥编程

访问类的成员变量

2020-01-03 228

使用Class对象可以获取类定义的所有成员变量,获取的成员变量以Field类型的对象或数组方式返回,每个Field对象代表一个成员变量,利用Field对象提供的方法可以操作该类的成员变量。

Class类定义了如下方法,用于访问类的成员变量。

●   Field[]  getFields()

该方法返回一个包含类成员变量对象的数组,该数组包含该类对象表示的类或接口的所有可访问的公共成员变量。

●   Field  getField(String name)

该方法返回一个类成员变量对象,该成员变量对象必须是公共成员。name参数是一个字符串,指定所需成员变量的名称。

●   Field[]  getDeclaredFields()

该方法返回一个类成员变量对象数组,该数组包括该类的所有成员变量。这包括公共、受保护、默认(包)访问和私有成员变量,但不包括继承的成员变量。

●   Field  getDeclaredField(String name)

该方法返回一个类成员变量对象。name参数是一个字符串,指定所需字段的简单名称。

案例1:建立FieldTest1测试类,应用Class类的getFields()方法获取Person类的成员变量。

在PCoreUnit8项目新建field包,在field包下新建FieldTest1类。代码如下:

package field;
 
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
 
import constructor.Person;
 
/** 
* @ClassName: FieldTest1 
* @Description: 反射(访问类的成员变量)案例1
* @author 编程训练营 
* @date  
* 
*/
 
public class FieldTest1 {
 
    /** 
    * @Title: main 
    * @Description:Java程序入口main方法  
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       // 获取Person类的Class对象
       Class<?>  personClass = (Class)Person.class;
      
       try {
            //通过class.getFields()获取所有具有public权限的成员变量
            Field[] fields = personClass.getFields();
            for (Field field : fields) {
                System.out.println("通过class.getFields()获取所有具有public权限的成员变量:" + field);
            }
            //通过class.getField(name)获取指定名称的成员变量
            //成员变量必须是public访问权限
            Field field1 = personClass.getField("job");
           System.out.println("通过class.getField(name)获取指定名称的成员变量" + field1);
          
           //通过class.getDeclaredFields获取所有的成员变量
            Field[] fields1 = personClass.getDeclaredFields();
            for (Field dfield : fields1) {
                System.out.println("通过class.getDeclaredFields获取所有的成员变量:" + dfield);
            }
           
            //通过class.getDeclaredField(name)获取指定名称的成员变量
            Field field2 = personClass.getDeclaredField("name");
           System.out.println("通过class.getDeclaredField(name)获取指定名称的成员变量" + field2);
       } catch (NoSuchFieldException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (SecurityException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
    
       
 
    }
 
}

FieldTest1程序应用Person类的静态成员变量class获取Class对象,分别调用Class类的getFields()、getField()、getDeclaredFields()、getDeclaredField()方法获取Person类的成员变量。

getField()方法和getDeclaredField()方法的区别是:getField()方法用于获取类或接口的所有可访问的公共成员变量;getDeclaredField()方法可以获取包括公共、受保护、默认(包)访问和私有成员变量,但不包括继承的成员变量。

程序执行结果如下图所示:

image.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论