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());
        }
    }
}
相关推荐
小bo波1 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8861 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103511 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师1 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马2 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261352 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261352 天前
Java 打印 Word 文档:从基础打印到高级设置
java