1.首先我们要用到Java高级中的反射知识
说下反射是什么,说人话,反射就是写代码的人就不用在代码里一个一个地写怎么创建这些对象和把它们连起来了,代码改起来也方便,结构也更灵活。
2.这里需要用到IO流中的打印流,其他的没什么难的,就是一些循环语句。
3.场景:做一个框架模型,可以把任意字符串输出到文本中去
4.上代码:
类1:
package d1_reflect; // 定义包名 import java.io.FileOutputStream; // 导入FileOutputStream类,用于创建文件输出流 import java.io.PrintStream; // 导入PrintStream类,用于打印输出到文件 import java.lang.reflect.Field; // 导入Field类,用于获取类的字段信息 public class ObjectFrame { // 目标:保存任意对象的字段和其数据到文件中去 public static void saveobject(Object obj) throws Exception { // 声明静态方法,接受一个 Object 类型的参数 PrintStream ps = new PrintStream(new FileOutputStream("src\\object1.txt", true)); // 创建 PrintStream,输出到指定文件,追加模式 // 1.拿到要保存的对象类型 Class c = obj.getClass(); // 获取传入对象的类 String cname = c.getSimpleName(); // 获取类的简单名称(不包括包名) ps.println("---------" + cname + "-------------"); // 打印分隔线和类名 // 2.从这个类中提取出它全部的成员变量 Field[] fields = c.getDeclaredFields(); // 获取类的所有字段(成员变量) // 遍历字段数组 for (Field f : fields) { // 对每个字段进行迭代 String name = f.getName(); // 获取字段名 f.setAccessible(true); // 设置字段可访问,忽略访问控制限制 // 拿到成员变量在对象中的数据 String value = f.get(obj) + ""; // 通过反射获取字段在对象中的值,并转换为字符串 ps.println(name + "=" + value); // 打印字段名和对应的值 } ps.close(); // 关闭 PrintStream,释放资源 } }
类2:
package d1_reflect; // 定义包名为d1_reflect public class TestFrame { public static void main(String[] args) throws Exception { Student student = new Student("小米", 21, "雷军", "红米", "北京"); // 创建学生对象 ObjectFrame.saveobject(student); // 保存学生对象 Teacher teacher = new Teacher("武汉大学", 100); // 创建教师对象 ObjectFrame.saveobject(teacher); // 保存教师对象 } }
此外还需创建Student和teacher类:
public class Teacher { private String name;}
public class Student { private String name; private int age; private String gender; private String address; private String phone;}
变量如上,提供get,set方法,有参,无参构造器即可。
5.运行结果:
另外,给大家提供了关于反射的面试知识点总结,学生和上班族都能用。点击下面链接即可。