1.定义一个Student类
/**
* @创建者 yindj
* @创建时间 2018/4/21 22:38
* @技术交流 (QQ:429310921)
* @部门 天元陆兵研发部
* @描述 定义一个学生类实现各种构造方法
*/
public class Student {
public Student(){}
public String name;
protected int age;
char sex;
private String phoneNum;
@Override
public String toString() {
return "Student[ name = " + name + ", age = "+ age +" ,sex = "+ sex +
",phoneNum = "+ phoneNum + "]";
}
2.定义一个Fields测试类
/**获取成员变量并且调用*/
public class Fields {
public static void main(String[] args)throws Exception{
/*1.获取Class对象*/
Class cls = Class.forName("com.bmw.Student");
/*2.获取所有的公有属性*/
sop("************获取所有的公有字段************");
Field[] fieldsArray = cls.getFields();
for (Field f :fieldsArray) {
sop(f);
}
/*3.获取所有的属性 公有 私有 受保护的*/
sop("************获取所有的字段(包括公有 私有、受保护、默认的)********************");
fieldsArray = cls.getDeclaredFields();
for(Field f : fieldsArray){
sop(f);
}
/*4.获取公有属性并且调用*/
sop("*************获取公有字段**并调用***********************************");
Field f = cls.getField("name");
sop(f);
/*获取一个对象*/
Object obj = cls.getConstructor().newInstance();//产生Student对象--》Student stu = new Student();
/*为属性赋值*/
f.set(obj, "张三");//为Student对象中的name属性赋值--》stu.name = "张三"
//验证
Student stu = (Student)obj;
sop("验证姓名:" + stu.name);
/*5.获取私有属性并且调用*/
sop("****************获取私有属性并调用*******************");
f = cls.getDeclaredField("phoneNum");
sop(f);
f.setAccessible(true);//强制访问私有属性
f.set(obj,"18888888888");
/*6.获取受保护的属性并且调用*/
sop("*************受保护的属性并调用*********************");
f = cls.getDeclaredField("age");
sop(f);
f.set(obj,20);
/*7.获取默认属性并调用*/
sop("*************默认的属性并调用*********************");
f = cls.getDeclaredField("sex");
sop(f);
f.set(obj, '男');
sop("属性打印 :" + stu);
}
private static void sop(Object obj){
System.out.println(obj);
}
}
3.打印信息
************获取所有的公有字段************
public java.lang.String com.bmw.Student.name
************获取所有的字段(包括公有 私有、受保护、默认的)********************
public java.lang.String com.bmw.Student.name
protected int com.bmw.Student.age
char com.bmw.Student.sex
private java.lang.String com.bmw.Student.phoneNum
*************获取公有字段**并调用***********************************
public java.lang.String com.bmw.Student.name
验证姓名:张三
****************获取私有属性并调用*******************
private java.lang.String com.bmw.Student.phoneNum
*************受保护的属性并调用*********************
protected int com.bmw.Student.age
*************默认的属性并调用*********************
char com.bmw.Student.sex
属性打印 :Student[ name = 张三, age = 20 ,sex = 男,phoneNum = 18888888888]
4.总结
(1).批量的
1).Field[] getFields():获取所有的"公有属性"
2).Field[] getDeclaredFields():获取所有属性,包括:私有、受保护、默认、公有;
(2).获取单个的:
1).public Field getField(String fieldName):获取某个"公有的"属性;
2).public Field getDeclaredField(String fieldName):获取某个属性(可以是私有的)
(3).设置属性的值:
Object obj = cls.getConstructor().newInstance();//很重要 产生Student对象--》Student stu = new Student();
Field --> public void set(Object obj,Object value):
参数说明:
1.obj:要设置的属性所在的对象;
2.value:要为属性设置的值;