高级java每日一道面试题-2025年4月21日-基础篇[反射篇]-如何使用反射获取一个类的所有方法?
如果有遗漏,评论区告诉我进行补充
面试官: 如何使用反射获取一个类的所有方法?
我回答:
在Java中,反射是一种强大的机制,允许程序在运行时检查或“反射”自身,从而动态地操作类、字段、方法和构造函数等。这在需要动态调用方法、构建框架或实现某些高级特性时特别有用。下面将详细介绍如何使用反射获取一个类的所有方法,包括公共方法、声明于特定类的方法以及私有方法。
1. 获取所有公共方法(包括继承的)
要获取一个类及其超类中声明的所有公共方法,可以使用 Class
对象的 getMethods()
方法。这个方法返回一个 Method
数组,包含了所有公共方法。
import java.lang.reflect.Method;public class ReflectionExample {public static void main(String[] args) {try {// 获取目标类的 Class 对象Class<?> clazz = Class.forName("com.example.MyClass");// 获取所有公共方法(包括继承的)Method[] methods = clazz.getMethods();for (Method method : methods) {System.out.println("公共方法名: " + method.getName());}} catch (ClassNotFoundException e) {e.printStackTrace();}}
}
2. 获取仅声明于特定类的公共方法
如果只想获取在特定类中声明的公共方法(不包括从父类继承的方法),则应使用 getDeclaredMethods()
方法。这个方法返回一个包含该类中声明的所有方法的数组,但不包括继承的方法。
import java.lang.reflect.Method;public class ReflectionExample {public static void main(String[] args) {try {// 获取目标类的 Class 对象Class<?> clazz = Class.forName("com.example.MyClass");// 获取本类中声明的所有公共方法(不包括继承的)Method[] declaredMethods = clazz.getDeclaredMethods();for (Method method : declaredMethods) {// 这里可以进一步检查方法的修饰符,以确定它是否是公共的if (java.lang.reflect.Modifier.isPublic(method.getModifiers())) {System.out.println("声明于本类的公共方法名: " + method.getName());}}} catch (ClassNotFoundException e) {e.printStackTrace();}}
}
3. 获取包括私有在内的所有声明方法
getDeclaredMethods()
返回所有声明的方法,包括公共、受保护、默认(包级私有)和私有方法。不过,默认情况下,这些方法的访问权限仍然受到限制。如果你需要访问私有方法,可以通过设置方法为可访问来实现:
import java.lang.reflect.Method;public class ReflectionExample {public static void main(String[] args) {try {// 获取目标类的 Class 对象Class<?> clazz = Class.forName("com.example.MyClass");// 获取所有声明的方法(包括私有方法)Method[] declaredMethods = clazz.getDeclaredMethods();for (Method method : declaredMethods) {// 设置为可访问(即使是私有方法)method.setAccessible(true);System.out.println("方法名(包括私有): " + method.getName());}} catch (ClassNotFoundException e) {e.printStackTrace();}}
}
注意事项
- 性能问题:反射通常比直接代码执行慢,因为它绕过了编译时的类型检查和优化。
- 安全限制:在某些安全管理器下,可能会限制对私有成员的访问。在Java 9及更高版本中,模块系统(JPMS)也可能对反射访问施加限制。
- 维护性:过度依赖反射会降低代码的可读性和维护性,因为反射隐藏了实际执行的操作细节。反射代码通常更难调试和理解。
- 访问控制:使用
setAccessible(true)
可以绕过Java的访问控制检查,但这通常不推荐在生产代码中使用,因为它破坏了封装性。
总结
- 使用
getMethods()
获取所有公共方法(包括继承的)。 - 使用
getDeclaredMethods()
获取所有声明的方法(不包括继承的),并通过Modifier
类检查访问修饰符。 - 使用
setAccessible(true)
可以访问私有方法,但要谨慎使用。
通过理解这些差异以及何时使用哪种方法,你可以在Java面试中展示对反射机制的深入理解,并在实际开发中根据需求选择合适的方式来获取类的方法。
相关文章:
高级java每日一道面试题-2025年4月21日-基础篇[反射篇]-如何使用反射获取一个类的所有方法?
如果有遗漏,评论区告诉我进行补充 面试官: 如何使用反射获取一个类的所有方法? 我回答: 在Java中,反射是一种强大的机制,允许程序在运行时检查或“反射”自身,从而动态地操作类、字段、方法和构造函数等。这在需要动态调用方法…...
tomcat集成redis实现共享session
中间件:Tomcat、Redis、Nginx jar包要和tomcat相匹配 jar包:commons-pool2-2.2.jar、jedis-2.5.2.jar、tomcat-redis-session-manage-tomcat7.jar 配置Tomcat /conf/context.xml <?xml version1.0 encodingutf-8?> <!--Licensed to the A…...
2.6 递归
递归 特性: >.一递一归 >.终止条件 一般为:0 1 -1 #测试函数的返回值为函数 def test_recursion():return test_recursion() print(test_recursion()) RecursionError: maximum recursion depth exceeded #案例:计算 …...
鸿蒙应用开发:如何修改APP名称与APP的图标
如何修改APP的名称? 修改APP的名称需要修改entry/src/main/resources/base/element/string.json文件 将EntryAbility_label的value修改为“需要修改成的名字”。 文件目录: 代码修改: {"string": [{"name": "modu…...
AI 模型在前端应用中的典型使用场景和限制
典型使用场景 1. 智能表单处理 // 使用TensorFlow.js实现表单自动填充 import * as tf from tensorflow/tfjs; import { loadGraphModel } from tensorflow/tfjs-converter;async function initFormPredictor() {// 加载预训练的表单理解模型const model await loadGraphMod…...
前端性能优化全攻略:JavaScript 优化、DOM 操作、内存管理、资源压缩与合并、构建工具及性能监控
1 为什么需要性能优化? 1.1 性能优化的核心价值:用户体验与业务指标 性能优化不仅是技术层面的追求,更是直接影响用户体验和业务成败的关键因素。 用户体验(UX): 响应速度:用户期望页面加载时…...
使用 acme.sh 自动更新 SSL 证书的指南
上篇文章讲了一下 如何利用acme.sh来申请ssl,但没有讲3个月到期后 如何续期,续期的时候会碰到什么问题? 1.查看当前的当前签发域名的到期时间 acme.sh list 2.重新申请ssl acme.sh --issue --dns dns_namesilo -d xxx.ai -d *.xxx.ai --dns…...
查看Spring Boot项目所有配置信息的几种方法,包括 Actuator端点、日志输出、代码级获取 等方式,附带详细步骤和示例
以下是查看Spring Boot项目所有配置信息的几种方法,包括 Actuator端点、日志输出、代码级获取 等方式,附带详细步骤和示例: 1. 使用Spring Boot Actuator Actuator是Spring Boot提供的监控和管理工具,包含/configprops端点可查看…...
C++与C
文章目录 C与C命令空间const关键字new/delete表达式引用(重点)概念引用的本质引用的使用场景引用作为函数的参数引用作为函数的返回值 总结 强制转换函数重载extern "C"默认参数 bool类型inline(内联)函数异常处理&…...
Nginx中间件的解析
目录 一、Nginx的核心架构解析 二、Nginx的典型应用场景 三、Nginx的配置优化实践 四、Nginx的常见缺陷与漏洞 一、Nginx的核心架构解析 事件驱动与非阻塞IO模型 Nginx采用基于epoll/kq等系统调用的事件驱动机制,通过异步非阻塞方式处理请求,…...
Ansys Zemax | 在 MATLAB 中使用 ZOS-API 的技巧
附件下载 联系工作人员获取附件 本文将介绍一些在MATLAB中使用 ZOS-API 的技巧,以提高您的工作效率并充分利用 ZOS-API 的功能。 简介 OpticStudio开发了应用程序接口 (API) ,用户可以使用API与不同的脚本环境进行连接和交互。使用API,用…...
js 生成pdf 并上传文件
js 生成pdf 并上传文件 使用 JsPDF html2Canvas 代码直接使用 注意注释 import JsPDF from jspdf import html2Canvas from html2canvas // 上传文件的方法 import { handleUploadImage } from /utils/uploadQuillEditdownPDF() {// 要打印元素的idconst cloneDom document.…...
刷刷刷刷刷sql题
NSSCTF 【SWPUCTF 2021 新生赛】easy_sql 这题虽然之前做过,但为了学习sql,整理一下就再写一次 打开以后是杰哥的界面 注意到html网页标题的名称是 “参数是wllm” 那就传参数值试一试 首先判断注入类型(数字型或字符型) 传1 …...
JavaScript 中的 this 及 this 指向的改变方法
在 JavaScript 的世界里,this是一个既强大又容易让人困惑的概念。它的指向在不同的函数调用场景下会动态变化,而call()、apply()和bind()这三个方法则为我们提供了精确控制this指向的能力。本文将从基础概念出发,结合具体案例,带大…...
安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南
安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南 模拟器过检测合集雷电mumu蓝叠逍遥夜神WSA 转自风车2025 前言 随着手机游戏和应用的普及,越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而,许多应用和游戏为…...
VSCode中安装GitGraph
前提是先安装git,官方下载地址:Git - Downloads 1. 在VSCode中安装GitGraph插件 2. 文件->首选项->设置,打开设置界面,在设置界面搜索git path 3. 打开配置文件配置git安装路径: 4. 打开源代码管理,…...
StartAI「万物迁移」功能设计师实操教程:模特换衣场景应用
一、功能核心优势解析 智能识别与场景融合 基于迁移学习算法,精准定位服装轮廓(支持复杂材质如蕾丝、镂空设计),自动匹配目标场景的光影方向与色温。 效率革命 传统PS手动换衣需2-3小时,使用万物迁移可压缩至2-5分…...
【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-放置标记
放置标记 文章目录 放置标记1、概述2、更新Globals.h3、放置标记4、渲染标记5、标记计数6、完整代码7、改进建议8、总结在本文中,我们实现标记放置和跟踪以完成的扫雷游戏项目。 1、概述 在我们扫雷游戏文章系列的最后部分中,我们将添加玩家在可疑的地雷位置放置标记的功能。…...
【Python】Selenium切换网页的标签页的写法(全!!!)
在使用selenium做网站爬取测试的时候,我们经常会遇到一些需要点击的元素,才能点击到我们想要进入的页面, 于是我们就要模拟 不断地 点点点击 鼠标的样子。 这个时候网页上就会有很多的标签页,你的浏览器网页标签栏 be like: 那…...
Spring Boot多环境配置详解
一、为什么需要多环境配置 在实际项目开发中,我们通常需要将应用部署到不同的环境中,比如: 开发环境(dev) - 开发人员本地开发调试使用测试环境(test) - 测试人员功能测试使用生产环境&#x…...
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习 (图片来源: Tara Winstead on Pexels) 在上一篇中,我们探讨了如何通过精心的特征工程,将时间序列预测问题转化为机器学习可以处理的监督学习任务。我们学习了如何创建滞后特征、滚动统计特征…...
RHCE 作业二(密钥登录实验)
1.进入ssh主配置文件恢复配置: 2.vim进入ssh子文件夹查看配置 3.重启服务 /etc/ssh/ key结尾或者.pub结尾的文件全部都是密钥 sshd_confg.d目录是服务的子配置文件 ssh_confg.d目录是客户端你的子配置文件 ~/.ssh/ 是当前用户的配置文件 4.服务器和客户端分别…...
android contentProvider 踩坑日记
写此笔记原因 学习《第一行代码》到第8章节实现provider时踩了一些坑,因此记录下来给后来人和自己一个提示,仅此而已。 包含内容 Sqlite数据库CURD内容provider界面provider项目中书籍管理provider实现逻辑用adb shell确认providercontentResolver接收…...
K8s:概念、特点、核心组件与简单应用
一、引言 在当今云计算和容器技术蓬勃发展的时代,Kubernetes(简称 K8s)已成为容器编排领域的事实标准。它为管理容器化应用提供了高效、可靠的解决方案,极大地简化了应用的部署、扩展和运维过程。无论是小型初创公司还是大型企业…...
基于表面肌电信号sEMG的手势识别——以Ninapro DB1数据集使用CNN网络识别为例
完整代码获取 评论区或者私信留邮箱 接论文辅导!中文核心辅导!SCI三四区辅导! 可接模型改进 任务描述 表面肌电信号( sEMG ) 是一种生物电信号,存在于肌肉神经。 当大脑下达肌肉动作指令,肌肉会产生控制信号ÿ…...
黑盒测试——等价类划分法实验
任务: 设某程序有两个输入:整数x1和整数x2,计算Yf(x1,x2)。x1和x2的取值范围为1< x1<500,1< x2<500。当x1在[1,200) 取值且x2在[1,300] 取值时,Yf(x1,x2) x1x2;当x1在[200,500] 取值且x2在[1,300] 取值时&…...
深度学习4月22笔记
1、过拟合与欠拟合 在训练深层神经网络时,由于模型参数较多,在数据量不足时很容易过拟合。而正则化技术主要就是用于防止过拟合,提升模型的泛化能力(对新数据表现良好)和鲁棒性(对异常数据表现良好)。 1. 概念认知 …...
【MySQL数据库入门到精通-03 数据类型及案列】
文章目录 一、三类数据类型二、数值类型三、字符串类型四、日期时间类型五、日期时间类型 一、三类数据类型 MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。 二、数值类型 比如: 1). 年龄字段 – 不会出现负数…...
【机器学习】决策树算法中的 “黄金指标”:基尼系数深度剖析
一、基尼系数的基本概念 基尼系数(Gini Impurity)在决策树分类算法中,是用于衡量数据纯度的重要指标,与信息熵有着相似的功能。在样本集合里,基尼系数代表随机选取一个样本时,该样本被分错的概率 。假设一…...
植被参数遥感反演技术革命!AI+Python支持向量机/随机森林/神经网络/CNN/LSTM/迁移学习在植被参数反演中的实战应用与优化
在全球气候变化与生态环境监测的重要需求下,植被参数遥感反演作为定量评估植被生理状态、结构特征及生态功能的核心技术,正面临诸多挑战。随着遥感技术的发展,数据复杂度不断提升,模型精度的要求也越来越高。同时,多源…...
【AI】SpringAI 第四弹:接入本地大模型 Ollama
Ollama 是一个开源的大型语言模型服务工具。它的主要作用是帮助用户快速在本地运行大模型, 简化了在 Docker 容器内部署和管理大语言模型(LLM)的过程。 1. 确保Ollama 已经启动 # 查看帮助文档 ollama -h# 自动下载并启动 ollama run deeps…...
C# MP3 伴奏
使用建议: 参数调节指南: 低频人声残留:降低CenterFrequency(800-1500Hz) 高频人声残留:提高CenterFrequency(2500-3500Hz) 消除力度不足:提高EliminationStrength(0.9-1.0) 伴奏失真:降低EliminationSt…...
【springsecurity oauth2授权中心】将硬编码的参数提出来放到 application.yml 里 P3
在application.yml里添加配置 application.yml oauth2:client:id: clientsecret: secretauthentication-method: client_secret_basicgrant-types: authorization_code,refresh_tokenredirect-uris:- http://localhost:8081/login/oauth2/code/client- http://localhost:8081…...
【Ansible】批量管理 Windows自动化运维
一,前期准备 1,控制端(Linux)的要求 Ansible可以在安装了Python 2(2.7版)或Python 3(3.5及更高版本)的任何机器上运行。控制端计算机不支持Windows。 2,客户端&#x…...
AES-128、AES-192、AES-256 简介
AES(Advanced Encryption Standard) 是一种广泛使用的对称加密算法,由美国国家标准与技术研究院(NIST)于2001年正式采纳,用于替代旧的 DES 和 3DES。AES 基于 Rijndael 算法,支持 128 位、192 位…...
osxcross 搭建 macOS 交叉编译环境
1. osxcross 搭建 macOS 交叉编译环境 1. osxcross 搭建 macOS 交叉编译环境 1.1. 安装依赖1.2. 安装 osxcross 及 macOS SDK 1.2.1. 可能错误 1.3. 编译 cmake 类工程1.4. 编译 configure 类工程1.5. 单文件编译及其他环境编译1.6. 打包成 docker 镜像1.7. 使用 docker 编译 …...
联通余额查询接口
接口名称 1) 请求地址 https://ucbss.10010.cn/npfweb/NpfWeb/Mustpayment/getMustpayment?number13112345586&province051&commonBean.phoneNo13112345586&channelType101https://ucbss.10010.cn/npfweb/NpfWeb/Mustpayment/getMustpayment?number13112345586&…...
Python 设计模式:桥接模式
1. 什么是桥接模式? 桥接模式是一种结构型设计模式,它通过将抽象部分与其实现部分分离,使得两者可以独立变化。桥接模式的核心思想是将抽象和实现解耦,从而提高系统的灵活性和可扩展性。 桥接模式的核心思想是将一个类的接口与其…...
7.6 GitHub Sentinel后端API实战:FastAPI高效集成与性能优化全解析
GitHub Sentinel Agent 用户界面设计与实现:后端 API 集成 关键词:前后端分离架构、RESTful API 设计、数据序列化、命令行工具开发、集成测试 后端 API 集成关键技术实现 本阶段需要完成前端界面与后端服务的无缝对接,实现以下核心功能: #mermaid-svg-FFnzT13beWV52dtx …...
Smart AI:在AI浪潮中崛起的智能NFT生态革命者
技术引领,智能进化:Smart AI强势登场 在全球AI技术浪潮席卷之际,由澳大利亚顶尖技术团队倾力打造的Smart AI平台横空出世,以其革命性的NFT智能进化系统,正在彻底重塑数字资产的未来图景。Smart AI不仅是一个平台&…...
Linux——基于socket编程实现简单的Tcp通信
前言1:想要实现一个简单的Tcp通信不难,对于初学者而言,难点在于使用了大量未曾接触过的函数调用,所以本篇重点在于详解每部分代码中相关函数的功能。 1. 简单认识一下TCP传输 TCP通信协议是面向字节流的、可靠的、有连接的传输&a…...
STL C++详解——priority_queue的使用和模拟实现 堆的使用
priority_queue的使用 std::priority_queue 是 C 标准模板库(STL)中的一个容器适配器,提供了优先队列的功能。 优先队列:是一种特殊的队列,队列中的每个元素都有与之关联的优先级,优先级高的元素会先出队…...
是否可以使用非被动 S4P 文件进行反嵌?
AEDT 电路去嵌入算法使用假定线性时不变 (LTI) 行为的转换。如果非被动 S 参数块不是 LTI,则倒数函数将无法按预期工作。...
GAEA的技术优势:分层加密与去中心化数据治理
GAEA采用分层加密架构,将用户数据分为三个层级: 基础层(链上数据):用户身份哈希、资源贡献记录等核心数据通过零知识证明(ZK-SNARKs)进行链上加密,确保不可篡改和匿名性。 情感层…...
使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第九讲)
这一期讲解GUI_guider中的容器控件的使用以及相关函数,容器本质上是具有布局和自动调整大小功能的基本对象 ,通常用来装载其他子控件。 打开上一期的项目,在工具栏中选中容器控件拖拽到界面中,具体如图所示: 容器默认…...
SparkStreaming概述
SparkStreaming主要用于流式计算,处理实时数据。 DStream是SparkStreaming中的数据抽象模型,表示随着时间推移收到的数据序列。 SparkStreaming支持多种数据输入源(如Kafka、Flume、Twitter、TCP套接字等)和数据输出位置…...
LeetCode---整数反转
整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 示例 示例 1: 输入:x 123 输出:321 示例 2…...
Conceptrol: Concept Control of Zero-shot Personalized Image Generation(个性化图像生成)
文章目录 一、论文介绍二、项目部署三、效果展示3.1ipadapter plus sd1.5的效果3.2ipadapter plus sd1.5 plus concept的效果3.3两者结果的比较:原本的ipadapter、加了concept的ipadapter 一、论文介绍 个性化图像生成中的平衡问题:现有的zero-shot adap…...
【Harmony】常用工具类封装
文章目录 一,简介二,网络请求工具类2.1、鸿蒙原生http封装2.2、第三方axios封装(需提前下载依赖) 三、录音笔相关工具类3.1、录音封装(录入)3.2、录音封装(放音/渲染)3.3、文件写入封装(针对录音/放音功能) 四、RDB关系型数据库4.1、relationalStore简答…...
大模型部署到本地就是私有化部署吗?
大模型私有化的定义需要从部署方式和数据/模型控制权两个维度来理解,不能简单地仅以“部署位置”或“数据训练”单一条件判断。以下是具体分析: 1. 大模型私有化的核心定义 根据知识库中的描述([1][2][3][8]): 私有化…...