Logo

郎哥编程

成员变量的相关操作

2020-01-03 206

Field类提供了对类成员变量的操作方法,应用这些方法可以获取成员变量的名称、类型、值,也可以设置成员变量的值。Field类在java.lang.reflect包内。

Field类定义的主要方法说明如下。

●   String  getName()

该方法用于获取成员变量的名称。

●   Class<?>  getType()

该方法用于获取成员变量的类型。

●   Object   get(Object obj)

该方法用于获取指定对象成员变量的值,返回类型是Object类型。

●   void  set(Object obj, Object value)

该方法用于设置指定对象成员变量的值,参数value为要设定的值。

●   byte  getByte(Object obj)

该方法用于获取指定对象成员变量类型为byte的值,返回类型为byte。

●   void  setByte(Object obj, byte b)

该方法用于设置指定对象成员变量类型为byte的值,参数b为要设定的值。

●   int  getInt(Object obj)

该方法用于获取指定对象成员变量类型为int的值,返回类型为int。

●   void  setInt(Object obj, int i)

该方法用于设置指定对象成员变量类型为int的值,参数i为要设定的值。

●   float  getFloat(Object obj)

该方法用于获取指定对象成员变量类型为float的值,返回类型为float。

●   void  setFloat(Object obj, float f)

该方法用于设置指定对象成员变量类型为float的值,参数f为要设定的值。

●   double  getDouble(Object obj)

该方法用于获取指定对象成员变量类型为double的值,返回类型为double。

●   void  setDouble(Object obj, double d)

该方法用于设置指定对象成员变量类型为double的值,参数d为要设定的值。

●   char  getChar(Object obj)

该方法用于获取指定对象成员变量类型为char的值,返回类型为char。

●   void  setChar(Object obj, char c)

该方法用于设置指定对象成员变量类型为char的值,参数c为要设定的值。

●   boolean  getBoolean (Object obj)

该方法用于获取指定对象成员变量类型为boolean的值,返回类型为boolean。

●   void  setBoolean (Object obj, boolean z)

该方法用于设置指定对象成员变量类型为boolean的值,参数z为要设定的值。

●   int  getModifiers()

该方法返回一个整数,该整数可用于Modifier获取修饰符方法的传入参数。

案例1:建立FieldTest2测试类,应用Class类的getFields()方法获取Person类的公共成员变量,输出每个成员变量的类型和修饰符,并设置成员变量的值。

在field包下新建FieldTest2类。代码如下:

package field;
 
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
 
import constructor.Person;
 
/** 
* @ClassName: FieldTest2 
* @Description:  反射(成员变量的相关操作)案例1
* @author 编程训练营 
* @date  
* 
*/
 
public class FieldTest2 {
 
    /** 
    * @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 {
           // 获取默认构造方法
           Constructor defaultConstructor = personClass.getConstructor();
           // 实例化Person对象
           Person person = (Person)defaultConstructor.newInstance();
           //通过class.getFields()获取所有具有public权限的成员变量
            Field[] fields = personClass.getFields();
            for (Field field : fields) {
               // 输出成员变量的名称
               System.out.printf("成员变量:%s\n",field.getName());
               // 获取和设置成员变量的值
               if( field.getName().equals("job") )
               {
                   System.out.printf("成员变量%s的值为:%s\n",field.getName(),field.get(person));
                   field.set(person,"程序员");
               }
               if( field.getName().equals("income") )
               {
                   System.out.printf("成员变量%s的值为:%.2f\n",field.getName(),field.getDouble(person));
                   field.setDouble(person, 15000);
               }
            }
            // 输出person对象成员变量job和income的值
            System.out.printf("成员变量%s的值为:%s\n","job",person.getJob());
            System.out.printf("成员变量%s的值为:%.2f\n","income",person.getIncome());
           
       } catch (NoSuchMethodException | SecurityException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (InstantiationException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (IllegalAccessException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (IllegalArgumentException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (InvocationTargetException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
    }
 
}

FieldTest2程序首先获取Person类默认的构造方法,并应用Constructor类的newInstance()方法实例化Person对象。然后调用Class类的getFields()方法获取Person类的公共成员变量,依据获取的变量名称获取变量成员的默认值和设置成员变量的值。Field类的get和set成员变量的方法都需要传入前面实例化的person对象。

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

image.png

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

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

评论区

登录 后发表评论
暂无评论