package testclass;
public class Boy {
private String name;
private int age;
public Boy(){}
public Boy(String name,int age){
this.age=age;
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package testclass;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
public class ClassUtil {
/**
* 获取类的成员变量的信息 成员变量也是对象 Field类封装了成员变量的操作 *
* @param obj
* @@param obj
*/
public static void getFieldMsg(Object obj) {
// 要获取类的信息首先要获取类的类类型
Class clazz = obj.getClass();// 传递的是哪个类的对象,clazz就是哪个类的类类型
// 获取类的名称
System.out.println(clazz.getName());
// Field[] fields = clazz.getFields();//获取类所有公共的成员变量
Field[] fields = clazz.getDeclaredFields();// 获取该类所有声明的成员变量
for (Field field : fields) {
// 获得成员变量类型的类类型
Class fieldType = field.getType();
// 获得变量类型的名称
String typeName = fieldType.getName();
// 获取变量名
String fieldName = field.getName();
// 设置些属性是可以访问的
field.setAccessible(true);
// 获取属性的值
Object value = null;
try {
value = field.get(obj);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(typeName + " " + fieldName + "=" + value);
// 给属性设置值
try {
if (typeName.endsWith("String")) {
field.set(obj, "小明");
}
if (typeName.endsWith("int")) {
field.set(obj, 12);
}
value = field.get(obj);
System.out.println("设置的值:"+typeName + " " + fieldName + "=" + value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 获取类的构造函数的信息 构造函数也是对象 Constructor类封装了成员变量的操作 *
* @param obj
* @@param obj
*/
public static void getConMsg(Object obj) {
// 要获取类的信息首先要获取类的类类型
Class clazz = obj.getClass();// 传递的是哪个类的对象,clazz就是哪个类的类类型
// 获取类的名称
System.out.println(clazz.getName());
// clazz.getConstructors();//获取类的public构造函数
Constructor[] cs=clazz.getDeclaredConstructors();//获取类的所有的构造函数
for (Constructor constructor : cs) {
System.out.print(constructor.getName()+"(");
//获取参数列表的类类型
Class[] ps = constructor.getParameterTypes();
for (int i = 0; i < ps.length; i++) {
System.out.print(ps[i].getSimpleName());
if(i<ps.length-1){
System.out.print(",");
}
}
System.out.println(")");
}
}
public static void main(String[] args) {
Boy b = new Boy();
b.setName("Jack");
b.setAge(15);
ClassUtil.getConMsg(b);
ClassUtil.getFieldMsg(b);
}
}