访问成员变量
这一部分的内容其实很简单,主要分为三个小部分
通过getFiled()等方法获得类中的成员变量,然后以数组形式返回
通过getName(),getType()等方法获得成员变量的具体信息
通过setInt(),set()等方法为成员变量赋值
首先我们先来看第一部分,通过getFiled()等方法获取类中的成员变量
其实这一步和我们上次讲的获得构造方法差不多
getFields() 此方法获得所有权限为public的成员变量
getField(String name) 获得权限为public的指定成员变量
getDelcareFields() 获得所有成员变量,按指定顺序返回
getDelcareField(String name) 获得指定成员变量
接下来的二三两部分我们通过代码来学习,看代码
public class Example_02 {
public int i;
protected float f;
private boolean b;
public String s;
}
上述代码我们创建了一个Example_02得类,里面我们创建了一些不同基本类型的成员变量,分别通过不同的权限修饰符来修饰
public class Main_02 {
public static void main(String[] args) throws ClassNotFoundException {
Example_02 example=new Example_02();//创建Example_02对象;
Class exampleC=example.getClass();//利用getClass方法,返回一个Class对象
//Class exampleC=Class.forName("annotation.Example_02");
Field [] declareFields=exampleC.getFields();//获得所有成员变量的集合;
for (int i = 0; i < declareFields.length; i++) {
Field field=declareFields[i];//获得特定的成员变量
System.out.println("名称为:"+field.getName());
Class fieldType=field.getType();//获得成员变量的类型
System.out.println("类型为:"+fieldType);
boolean istrue=true;
while(istrue){
try {
istrue=false;
System.out.println("修改前的值为:"+field.get(example));//获得修改前的成员变量值
//判断成员变量的类型是否为int型
if (fieldType.equals(int.class)) {
System.out.println("利用setint修改成员变量的值");
field.setInt(example, 200);//为int型成员变量赋值
}
//判断成员变量的类型是否为boolean型
else if (fieldType.equals(boolean.class)) {
System.out.println("利用setBoolean修改成员变量的值");
field.setBoolean(example, true);//为boolean型成员变量赋值
}
//判断成员变量的类型是否为float型
else if (fieldType.equals(float.class)) {
System.out.println("利用setFloat修改成员变量的值");
field.setFloat(example, 15.6f);//为float型成员变量赋值
}
else{
System.out.println("利用set修改成员变量的值");
field.set(example, "李奇峰");//可以为各种成员变量赋值
}
System.out.println("修改后的值为:"+field.get(example));
} catch (Exception e) {
// TODO: handle exception
System.out.println("在设置成员变量时抛出异常,下面执行setAccessible()方法");
field.setAccessible(true);
istrue=true;
}
}
System.out.println();
}
}
}
上述代码输出的结果为
名称为:i
类型为:int
修改前的值为:0
利用setint修改成员变量的值
修改后的值为:200名称为:f
类型为:float
修改前的值为:0.0
利用setFloat修改成员变量的值
修改后的值为:15.6名称为:b
类型为:boolean
修改前的值为:false
利用setBoolean修改成员变量的值
修改后的值为:true名称为:s
类型为:class java.lang.String
修改前的值为:null
利用set修改成员变量的值
修改后的值为:李奇峰
上述代码的演示中我们可以看到,对于set()等方法而言呢,我们可以set的都是基本类型,例如setInt(),setFloat()等。
而我们的get()方法获取的是指定对象的成员变量的值,返回类型为Object 类
当然,还可以getInt(),getBoolean();等