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());
        }
    }
}
相关推荐
小江的记录本1 小时前
【分布式】分布式核心组件——分布式锁:Redis/ZooKeeper/etcd 实现方案(附全方位对比表)、优缺点、Redlock、时钟回拨问题
java·网络·redis·分布式·后端·zookeeper·架构
好家伙VCC1 小时前
**发散创新:用Rust实现基于RAFT共识算法的轻量级分布式日志系统**在分布式系统中,**一致性协议**是保障数据可靠
java·分布式·python·rust·共识算法
晔子yy2 小时前
【JAVA探索之路】从头开始讲透、实现单例模式
java·开发语言·单例模式
chools8 小时前
【AI超级智能体】快速搞懂工具调用Tool Calling 和 MCP协议
java·人工智能·学习·ai
李白你好8 小时前
TongWeb EJB 反序列化生成工具(Java-Chain 插件)
java·安全
U盘失踪了9 小时前
Java 的 JAR 是什么?
java·jar
今天又在写代码10 小时前
java-v2
java·开发语言
competes10 小时前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql
2501_9130613411 小时前
网络原理知识
java·网络
希望永不加班11 小时前
Spring AOP 代理模式:CGLIB 与 JDK 动态代理区别
java·开发语言·后端·spring·代理模式