456. Java 反射 - 浅层方法访问
📅 2026/7/7 18:26:21
👁️ 次浏览
文章目录456. Java 反射 - 浅层方法访问1. 查看类的所有方法2. 通过 Reflection 调用方法3. 动态调用静态方法3.1 目标3.2 示例代码3.3 输出示例4. 总结456. Java 反射 - 浅层方法访问在前面的课程中我们学习了如何获取对象的Class现在我们来探索如何通过 Reflection 获取类的方法并调用它们。1. 查看类的所有方法我们可以使用Class.getMethods()获取某个类的所有公共方法包括继承的接口方法和父类方法importjava.util.Iterator;importjava.util.stream.Stream;publicclassMethodsOnIterator{publicstaticvoidmain(String[]args){Stream.of(Iterator.class.getMethods()).forEach(System.out::println);}}输出示例以 Java 21 为例publicdefaultvoidjava.util.Iterator.remove()publicdefaultvoidjava.util.Iterator.forEachRemaining(java.util.function.Consumer)publicabstractbooleanjava.util.Iterator.hasNext()publicabstractjava.lang.Objectjava.util.Iterator.next()✅说明可以看到迭代器的方法包括抽象方法和默认方法Reflection 可以让我们在运行时访问这些方法并调用它们2. 通过 Reflection 调用方法假设我们想调用Iterator的forEachRemaining方法importjava.util.List;importjava.util.Iterator;importjava.util.function.Consumer;publicclassMethodsOnIteratorCalling{publicstaticvoidmain(String[]args)throwsReflectiveOperationException{// 创建一个迭代器IteratorStringiteratorArrays.asList(Hello,Dev,Java).iterator();// 1. 获取 forEachRemaining 方法// 注意需要指定参数类型的 Class 对象MethodforEachRemainingMethodIterator.class.getMethod(forEachRemaining,Consumer.class);// 2. 准备参数定义一个 Consumer 用于打印ConsumerStringprintlnSystem.out::println;// 3. 调用方法// invoke(对象实例, 参数...)forEachRemainingMethod.invoke(iterator,println);}}✅注意事项可能会抛出异常如NoSuchMethodException或IllegalAccessExceptionJava 7 引入ReflectiveOperationException覆盖了所有反射相关异常3. 动态调用静态方法Reflection 还可以用来动态调用静态方法即使我们在编写代码时并不知道具体方法。下面是一个实战示例3.1 目标对一个数字列表进行操作在Collections类中查找所有返回类型为void、参数为List的方法调用这些方法并观察效果3.2 示例代码importjava.util.Collections;importjava.util.List;importjava.util.stream.Collectors;publicclassCollectionsListMethods{publicstaticvoidmain(String[]args)throwsReflectiveOperationException{// 1. 准备数据将 π 的前 16 位数字拆分为 ListIntegerStringpiStr3141592653589793;ListIntegerpipiStr.chars().map(c-c-0).boxed().collect(Collectors.toList());System.out.println(原始列表: pi);// 2. 遍历 Collections 的所有公共方法for(Methodmethod:Collections.class.getMethods()){// 筛选条件// 1. 返回值为 void// 2. 参数个数为 1// 3. 参数类型为 Listif(method.getReturnType()void.classmethod.getParameterCount()1method.getParameterTypes()[0]List.class){System.out.println(调用方法: method.getName());// 3. 调用静态方法// 注意调用静态方法时invoke 的第一个参数传 nullmethod.invoke(null,pi);System.out.println(结果: pi);System.out.println(---);}}}}3.3 输出示例原始列表:[3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3]调用方法:reverse()[3,9,7,9,8,5,3,5,6,2,9,5,1,4,1,3]调用方法:sort()[1,1,2,3,3,3,4,5,5,5,6,7,8,9,9,9]调用方法:shuffle()[5,7,4,9,9,9,2,1,6,5,3,3,1,5,3,8]✅说明找到了三个匹配方法reverse(),sort(),shuffle()静态方法的调用不依赖实例invoke(null, args…)这种方式可以用于动态处理集合或调用工具类方法4. 总结Reflection 可以访问类的所有公共方法可以动态调用实例方法和静态方法异常处理ReflectiveOperationException统一处理反射异常应用场景框架动态调用方法如 ORM、注解处理工具类通用操作如自动排序、集合操作
AI 本质是内存?金正浩教授抛出颠覆认知论断被称为 "HBM 之父" 的韩国科学技术院(KAIST)金正浩教授提出一个颠覆认知的判断:AI 的本质是内存,而不是 GPU。近日,金正浩教授接受视频专访,…
📅 2026/7/7 18:26:21
B站直播弹幕机器人:5大核心功能提升直播间管理效率 【免费下载链接】MagicalDanmaku 本仓库及所有相关项目已永久停止开发、维护和任何形式的分发。 项目地址: https://gitcode.com/gh_mirrors/bi/MagicalDanmaku
Bilibili-MagicalDanmaku(神奇弹…
📅 2026/7/7 18:26:21
系统集成、机房工程项目集采服务器电源线,不仅要适配设备工况,更要满足项目验收合规要求,一旦线材选型不达标,会出现验收卡壳、后期运维故障频发等问题。工程集采必须建立标准化选型体系,围绕接口兼容性、电流负载冗余…
📅 2026/7/7 18:24:21
Cats Blender Plugin终极指南:5个高效VRChat模型优化的专业技巧 【免费下载链接】cats-blender-plugin :smiley_cat: A tool designed to shorten steps needed to import and optimize models into VRChat. Compatible models are: MMD, XNALara, Mixamo, DAZ/Pose…
📅 2026/7/7 19:26:29
OpenEuler Enclave-Device-Plugins入门:3步快速部署你的首个机密计算设备插件 【免费下载链接】enclave-device-plugins Collections of device plugins for enclave confidential computing 项目地址: https://gitcode.com/openeuler/enclave-device-plugins …
📅 2026/7/7 19:26:29
GBFR-Logs深度指南:从零开始掌握碧蓝幻想Relink数据统计 【免费下载链接】gbfr-logs GBFR Logs lets you track damage statistics with a nice overlay DPS meter for Granblue Fantasy: Relink. 项目地址: https://gitcode.com/gh_mirrors/gb/gbfr-logs
GB…
📅 2026/7/7 19:26:29
RePKG技术深度解析:逆向工程Wallpaper Engine资源格式的架构设计与性能优化 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg
在数字内容创作领域,封闭格式往往…
📅 2026/7/7 19:26:29
终极指南:OpenEuler Enclave-Device-Plugins如何为机密计算保驾护航 【免费下载链接】enclave-device-plugins Collections of device plugins for enclave confidential computing 项目地址: https://gitcode.com/openeuler/enclave-device-plugins
前往项目…
📅 2026/7/7 19:26:29
openEuler ROS容器化部署:使用Docker和Kubernetes管理机器人集群 【免费下载链接】ros It provides ROS source for openEuler 项目地址: https://gitcode.com/openeuler/ros
前往项目官网免费下载:https://ar.openeuler.org/ar/
openEuler ROS是…
📅 2026/7/7 19:24:29
CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…
📅 2026/7/7 0:00:45
B站评论删除API逆向工程实战:关键参数解析与自动化操作指南1. 理解B站评论删除机制的核心逻辑在视频平台内容管理中,评论删除功能涉及复杂的权限验证和数据交互流程。B站的评论删除API采用了一套基于Web安全标准的防护机制,主要依赖三个关键参…
📅 2026/7/7 0:00:45
1. 项目概述:为什么Java安全是红蓝对抗的焦点在当前的网络安全攻防演练,也就是我们常说的红蓝对抗中,Java应用一直是双方交锋的核心战场。这不仅仅是因为Java在企业级应用、金融系统和大型互联网后台中无处不在,更因为其技术栈的复…
📅 2026/7/7 0:00:45
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/7 12:08:23
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/7 9:08:28
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/7 6:33:36
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/7 9:08:31
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/7 9:08:30
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/7 4:32:18