Java反射实战:动态操作Car类属性

已知一个Car类

java 复制代码
package com.heima.Hello;

public class Car {
    public String brand = "宝马X5";
    public int price = 500000;
    public String color = "black";

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                ", color='" + color + '\'' +
                '}';
    }
}

关于这个 Car 类进行相关操作

java 复制代码
package com.heima.Hello.reflection.class_;

import com.heima.Hello.Car;

import java.lang.reflect.Field;

public class Class02 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException {
        String classAllPath = "com.heima.Hello.Car";
        // 1. 获取到 Car 类对应的 class 对象
        // <?> 表示不确定的 class 对象
        Class<?> cls = Class.forName(classAllPath);
        // 2. 输出 class 对象
        System.out.println(cls); // 显示 cls 对象,是哪个类的class对象
        System.out.println(cls.getClass());// 输出运行类型  java.lang.Class

        // 3. 得到包名
        System.out.println(cls.getPackage().getName());
        // 4. 得到全类名
        System.out.println(cls.getName());
        // 5. 通过 cls 创建对象实例
        Car car = (Car) cls.newInstance();
        System.out.println(car); // 调用 Car 类的 toString 方法
        // 6. 通过反射获取属性
        Field brand = cls.getField("brand");
        System.out.println(brand.get(car)); // 获取属性值,宝马X5
        // 7. 通过反射给属性赋值
        brand.set(car, "奔驰E300L");
        System.out.println(brand.get(car)); // 获取属性值,奔驰E300L
        // 8. 获取所有的属性
        System.out.println("======所有的字段属性======");
        Field[] fields = cls.getFields();
        for (Field f : fields) {
            System.out.println(f.getName());
        }
    }
}
相关推荐
Alanzeeb2 小时前
博客系统测试文档
java·javascript·功能测试·可用性测试
anzhxu2 小时前
MySQL Workbench菜单汉化为中文
java
96772 小时前
C++ 内存管理的核心——RAII 机制。两种锁 lock_guard, unique_lock
java·jvm·c++
bearpping2 小时前
MySQL JSON数据类型全解析(JSON datatype and functions)
java
lclcooky2 小时前
JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)
java·tomcat
想进大厂的小徐2 小时前
Spring 容器启动与 Bean 创建流程
java·spring boot·spring
dreamxian2 小时前
微服务1 -- MybatisPlus
java·微服务·架构
糖炒栗子03262 小时前
后端异步任务编排:基于 RabbitMQ 的“中控-工人”模式
java·rabbitmq
SimonKing2 小时前
紧急自查!Apifox被投毒,使用者速看:你的Git、SSH、云密钥可能已泄露
java·后端·程序员