import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.sql.Timestamp;
import java.util.Calendar;
public class Exec {
public static void main(String[] args) throws Exception {
Calendar birthday = Calendar.getInstance();
birthday.set(1985, 7, 21, 0, 0, 0);
Student s1 = new Student("00008", "胡歌", true, new Timestamp(
birthday.getTimeInMillis()), 1.80);
ClassInfo classInfo = new ClassInfo();
System.out.println(classInfo.getClassInfo(s1));
}
}
// 该类可以获取任何类的元数据信息
class ClassInfo {
public String getClassInfo(Object obj) {
StringBuffer result = new StringBuffer();
// 得到参数类变量的Class引用变量
Class cls = obj.getClass();
// 得到参数类变量的属性信息
Field[] fields = cls.getDeclaredFields();
// 得到参数类变量的完整类名(含有包的名称)
String fullName = cls.getName();
// 得到去除包名称的类名
String className = fullName.substring(fullName.lastIndexOf('.') + 1);
// 如果有包的定义,可以得到包的名称
int packagePosition = fullName.lastIndexOf('.');
String packageName = null;
if (packagePosition < 0)
packageName = "";
else
packageName = fullName.substring(0, fullName.lastIndexOf('.'));
// 输出包名和类名
result.append("包的名称为:" + packageName + "/n");
result.append("类的名称为:" + className + "/n");
// 输出类中所有的属性信息
for (Field field : fields) {
// 允许访问私有成员
field.setAccessible(true);
try {
// 输出私有属性信息
if (field.getModifiers() == Modifier.PRIVATE)
result.append("私有属性" + field.getName() + ":值为"
+ field.get(obj) + "/n");
// 输出受保护属性信息
if (field.getModifiers() == Modifier.PROTECTED)
result.append("受保护属性" + field.getName() + ":值为"
+ field.get(obj) + "/n");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
return result.toString();
}
}
// 学生类
class Student {
// 学号
private String number = null;
// 姓名
private String name = null;
// 性别
private boolean sex = false;
// 生日
private Timestamp birthday = null;
// 身高
private double height = 0;
// 默认构造函数
public Student() {
}
// 该构造函数可以对学生的属性进行初始化
public Student(String number, String name, boolean sex, Timestamp birthday,
double height) {
setNumber(number);
setName(name);
setSex(sex);
setBirthday(birthday);
setHeight(height);
}
// 学号的读取函数
public String getNumber() {
return number;
}
// 学号的设置函数
public void setNumber(String number) {
this.number = number;
}
// 姓名的读取函数
public String getName() {
return name;
}
// 姓名的设置函数
public void setName(String name) {
this.name = name;
}
// 性别的读取函数
public boolean isSex() {
return sex;
}
// 性别的设置函数
public void setSex(boolean sex) {
this.sex = sex;
}
// 生日的读取函数
public Timestamp getBirthday() {
return birthday;
}
// 生日的设置函数
public void setBirthday(Timestamp birthday) {
this.birthday = birthday;
}
// 身高的读取函数
public double getHeight() {
return height;
}
// 身高的设置函数
public void setHeight(double height) {
this.height = height;
}
// 格式化字符信息输出
public String toString() {
return "学号:" + number + "/n姓名:" + name + "/n是否为男生:" + sex + "/n生日:"
+ birthday + "/n身高:" + height;
}
}
程序运行结果:
包的名称为:
类的名称为:Student
私有属性number:值为00008
私有属性name:值为胡歌
私有属性sex:值为true
私有属性birthday:值为1985-08-21 00:00:00.264
私有属性height:值为1.8