反射:作用、应用场景

 

 

 

复制代码
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();
    }
}
复制代码

 

posted @   Karlshell  阅读(8)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示