[JAVASE] 反射

一. 反射概念

反射(Reflection)允许程序在运行时查询、访问和修改类、接口、字段和方法的信息。反射提供了一种动态操作类的能力。

二. Java反射的基本使用和应用

java.lang.reflect 是 Java 反射机制的核心包 ,提供了操作类及其成员(字段、方法、构造函数等)的类和接口。通过这些 API,开发者可以在运行时动态地查询和修改类的结构。

2.1 获取Class对象

  • 通过类字面量

    • // 类字面量 Class<?> peoClass = Peo.class;
  • 通过getClass方法

    • // getClass方法 Peo peo = new Peo(); Class<?> peoClass2 = peo.getClass();
  • 通过Class.forName()

    • // Class.forName()方法 Class<?> peoClass3 = Class.forName("Peo");

2.2 创建对象

java 复制代码
		// 通过反射动态创建对象 
        Peo peo = Peo.class.getDeclaredConstructor().newInstance();

2.3 访问成员属性

java 复制代码
        // 访问字段
        Class<?> classPeo = Peo.class;
        Field field = classPeo.getDeclaredField("name");

        field.setAccessible(true); // 如果字段是私有的, 需要设置为可访问
        field.set(peo, "xynu"); // 设置字段值
        Object o = field.get(peo); // 获取字段值
        System.out.println(o);

2.4 访问成员方法

调用无参方法

  • Method method = classPeo.getDeclaredMethod("print"); method.invoke(peo);

调用有参方法

  • Method method1 = classPeo.getDeclaredMethod("add", Integer.class, Integer.class); method1.invoke(peo, 1, 2);

2.5 获取构造函数

java 复制代码
        Class<?> classPeo = Peo.class;

        // 获取构造函数
        Constructor<?> constructor = classPeo.getConstructor(String.class, Integer.class);
        System.out.println(constructor.getName());

2.6 获取接口和父类

java 复制代码
        Class<?> classPeo = Peo.class;

        // 获取接口和父类
        Class<?>[] interfaces = classPeo.getInterfaces();
        for (Class<?> c : interfaces) {
            System.out.println(c.getName());
        }

        Class<?> superclass = classPeo.getSuperclass();
        System.out.println(superclass.getName());
相关推荐
蛋蛋的就会顺顺的2 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
余槐i2 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8263 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡3 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
死磕音视频3 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林4 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne5 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF5 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
silvamux_5 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
pride.li5 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉