反射:作用、应用场景
package Karl.Demo.FanShe; import org.junit.Test; public class Test1 { @Test public void save() throws Exception { Student si=new Student("黑马吴彦祖",45,'男',185.3,"篮球,冰球,阅读"); Teacher t1=new Teacher("波妞",999.9); ObjectFrame.saveObject(si); ObjectFrame.saveObject(t1); } }
package Karl.Demo.FanShe; public class Teacher { private String name; private double salary; public Teacher() { } public Teacher(String name, double salary) { this.name = name; this.salary = salary; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } @Override public String toString() { return "Teacher{" + "name='" + name + '\'' + ", salary=" + salary + '}'; } }
package Karl.Demo.FanShe; public class Student { private String name; private int age; private char sex; private double height; private String hobby; public Student() { } public Student(String name, int age, char sex, double height, String hobby) { this.name = name; this.age = age; this.sex = sex; this.height = height; this.hobby = hobby; } 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; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", sex=" + sex + ", height=" + height + ", hobby='" + hobby + '\'' + '}'; } }
package Karl.Demo.FanShe; import java.io.FileOutputStream; import java.io.PrintStream; import java.lang.reflect.Field; public class ObjectFrame { public static void saveObject(Object obj) throws Exception { //有打印流包装低级输出流访问到文件,加true追加输出 PrintStream ps=new PrintStream(new FileOutputStream("F:\\Develop\\code\\Demo1\\src\\data.txt",true)); //obj是任意对象,因为不知道有什么字段要保存 Class c=obj.getClass(); //使用反射方法获取参数数据打印 String cName=c.getSimpleName(); ps.println("----------------"+cName+"--------------"); //使用反射方法获取全部成员变量 Field[] fields=c.getDeclaredFields(); //遍历全部成员变量 for (Field field : fields) { //获取成员变量名字 String name=field.getName(); //禁止检查访问 field.setAccessible(true); //拿到成员变量在对象中的数据,因为是Object所以加“”变成String String value=field.get(obj)+""; //打印获取到的数据 ps.println(name+"="+value); } ps.close(); } }