浅谈Java反射2

简介: 浅谈Java反射2

浅谈Java反射1https://blog.csdn.net/qq_48817343/article/details/137826708?spm=1001.2014.3001.5502


保存任意数据--练习

package com.reflect5;
/**
 * @author yl
 * @createDate 2023/4/12
 * @description
 */
public class Student {
    private String name;
    private Integer age;
    private String gender;
    private Double height;
    private String hobby;
    public Student() {
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", height=" + height +
                ", hobby='" + hobby + '\'' +
                '}';
    }
    public Student(String name, Integer age, String gender, Double height, String hobby) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.height = height;
        this.hobby = hobby;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    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;
    }
}
package com.reflect5;
/**
 * @author yl
 * @createDate 2023/4/15
 * @description
 */
public class Teacher {
    private String name;
    private Integer salary;
    public Teacher() {
    }
    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }
    public Teacher(String name, Integer salary) {
        this.name = name;
        this.salary = salary;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getSalary() {
        return salary;
    }
    public void setSalary(Integer salary) {
        this.salary = salary;
    }
}
package com.reflect5;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
/**
 * @author yl
 * @createDate 2023/4/14
 * @description
 */
public class MyReflectDemo {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, IOException {
        /*
        对任意一个对象都可以把对象的所有字段和值,保存到文件中去
         */
        Student student = new Student("小红", 18, "0", 170.0, "随机");
        Teacher teacher = new Teacher("波妞", 10000);
        saveObject(teacher);
    }
    // 保存对象的所有成员变量和值保存到本地文件中
    public static void saveObject(Object obj) throws IllegalAccessException, IOException {
        //1.获取字节码文件对象
        Class classz = obj.getClass();
        //2.创建IO流
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:\\study\\java\\proxytest\\src\\com\\a.text"));
        //3.获取所有的成员变量
        Field[] declaredFields = classz.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            declaredField.setAccessible(true);
            // 获取成员变量的名字
            String name = declaredField.getName();
            //获取成员变量的值
            Object value = declaredField.get(obj);
            //写出数据
            bufferedWriter.write(name + "=" + value);
            bufferedWriter.newLine();
        }
        bufferedWriter.close();
    }
}

跟配置文件结合动态创建

反射可以跟配置文件结合的方式,动态的常创建对象,并调用方法

相关文章
|
6天前
|
网络协议 算法 Java
|
6天前
|
Java C++
Java反射的简单使用
Java反射的简单使用
22 3
|
6天前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
4天前
|
安全 Java API
JAVA-不安全的反射--RCE
JAVA不安全的反射造成的RCE小案例
|
6天前
|
SQL 存储 Java
【Java反射详解】
【Java反射详解】
14 1
|
6天前
|
Java
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识
【5月更文挑战第2天】JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识。入坑JAVA因它的面向对象特性、平台无关性、强大的标准库和活跃的社区支持。
42 2
|
6天前
|
Java 测试技术
滚雪球学Java(24):Java反射
【4月更文挑战第13天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
23 0
滚雪球学Java(24):Java反射
|
6天前
|
Java
Java 反射
Java 反射
|
6天前
|
设计模式 Java 索引
由反射引出的Java动态代理与静态代理
由反射引出的Java动态代理与静态代理
16 0
|
6天前
|
存储 Java Shell
深入剖析Java中的反射,由浅入深,层层剥离!
深入剖析Java中的反射,由浅入深,层层剥离!
14 1