开发日常小结(35):源码分析:反射的方法获取

【Java进阶营】阿里P7架构师花了16小时讲完Spring源码解析整套笔记,满满399页,拿走不谢 正文 开发人员面对突如其来的变化,无论在架构选型,还是在日常开发中,总会面临各种挑战和考验。唯有系统性地掌握 Spring Framework 编程思想、设计理念,以及具体的实现方式,方可游刃有余,以免进退失据。 作为 Spring 技术生态的基石,Spring Framework 无论在设计,还是在实现上,都是一个优秀的框架,许多细节方面是非常值得我们学习的,包括: Java 语言特性的运用,如反射、动态代理、枚举、泛型、注解、ARM,Lambda 语法等 设计思想和模式的实现,如 OOP、IoC、DD 阅读详情

目录

1、提出问题:

2、测试Demo:

3、源码

3/1 getMethods()方法

3/2 getDeclaredClasses()方法


 

1、提出问题:

Class.getMethods() 和 Class.getDeclaredMethods()区别是什么?获取到哪些返回值?

 

2、测试Demo:


public class test_class_extends_static_function_polymorphic {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 try {
			Class c=Class.forName("C");
			Method[] methods = c.getMethods();
			for(int i=0;i<methods.length;i++) {
				System.out.println(methods[i]);
			}
			System.out.println("====");
			Method[] declaredMethods = c.getDeclaredMethods();
			for(int i=0;i<declaredMethods.length;i++) {
				System.out.println(declaredMethods[i]);
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

class C{
	public static void C(){}
	private static void B(){}
}

console:

public static void C.C()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
====
private static void C.B()
public static void C.C()

 

总结:

1)getDeclaredClasses():获取的是所有定义的方法;     

     * @return the array of {@code Class} objects representing all the
     *        declared members of this class 

2)getMethods():获取的是所有public修饰符权限的方法;

     * @return the array of {@code Method} objects representing the
     *         public methods of this class

 

3、源码

3/1 getMethods()方法

 

    @CallerSensitive
    public Method[] getMethods() throws SecurityException {
        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
        return copyMethods(privateGetPublicMethods());
    }

可以看到:Member.PUBLIC;这个是Membet 接口定义的常量:

    /**
     * Identifies the set of all public members of a class or interface,
     * including inherited members.
     */
    public static final int PUBLIC = 0;

3/2 getDeclaredClasses()方法

    @CallerSensitive
    public Class<?>[] getDeclaredClasses() throws SecurityException {
        checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), false);
        return getDeclaredClasses0();
    }

可以看到:Member.PUBLIC;同样也是Membet 接口定义的常量:

    /**
     * Identifies the set of declared members of a class or interface.
     * Inherited members are not included.
     */
    public static final int DECLARED = 1;

 

ps:java程序设计中,其实不提倡使用接口定义常量;

 

技术写作即思维建模:300字认知体操法 技术写作本质上是将隐性知识显性化、碎片经验结构化的过程,其核心不在表达技巧,而在思维建模能力。当程序员面对‘Redis缓存穿透’或‘TCP三次握手’等概念时,卡壳往往源于缺乏问题域锚点、代价锚点与替代方案锚点——这正是知识未完成内化的信号。CoffeeDeveloper方法以15分钟为安全时限、300字为最小闭环、不发布为前提,通过强制输出倒逼思维结晶,把写作还原为可重复、可计量的认知训练。它不追求内容传播,而专注提升技术人的概念厘清力、边界判断力与跨场景迁移力,适用于日常学习沉淀、故障复盘、团队知识共建等 阅读详情

相关推荐

南卡Clip Pro开放式耳机评测:Super sound OS 2.0如何用算法重塑音质与Live感

在音频设备领域,声学原理与信号处理算法是提升听感的核心技术。传统耳机依赖物理结构营造声场,而开放式耳机因结构开放面临低频泄露与声场塑造的挑战。通过实时动态调音系统,可对采集到的耳道声音信号进行实时比对与补偿,从而修正物理缺陷,实现音质优化。这项技术不仅体现了算法在嵌入式系统中的工程价值,也为运动、通勤等开放环境下的音频体验提供了创新解决方案。本文以南卡Clip Pro搭载的Super sound OS 2.0系统为例,深入解析其如何通过动态补偿与循环校准,在开放式耳机中实现临场感十足的“Live感”音质,打

weixin_33868027的博客 523

反射之getMethods、getDeclaredMethods

getDeclaredMethods publicOnly = false public Method[] getDeclaredMethods() throws SecurityException { checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true); return copyMethods(privateGetDeclaredMethods(false)); } getMet

kongkong的专栏 519

冰河木马实验(V8.4)

简述: 百科词条 冰河木马开发于1999年,跟灰鸽子类似,在设计之初,开发者的本意是编写一个功能强大的远程控制软件。但一经推出,就依靠其强大的功能成为了黑客们发动入侵的工具,并结束了国外木马一统天下的局面,跟后来的灰鸽子等等成为国产木马的标志和代名词。 冰河的服务器端程序为G-server.exe,客户端程序为G-client.exe,默认连接端口为7626。其中攻击者使用G-client.e...

野原新之助 1万+

java 反射机制 之 getMethods获取所有公有方法 和 getDeclaredMethods 获取本类所有方法

java 反射机制 之 getMethods获取所有公有方法 和 getDeclaredMethods 获取本类所有方法

不废话快上车 7272

从AMCL到SLAM Toolbox:在Nav2中实现高精度纯定位的实践指南

本文详细介绍了从AMCL迁移到SLAM Toolbox纯定位模式的实践指南,帮助开发者在Nav2中实现高精度定位。通过对比AMCL与SLAM Toolbox的性能差异,提供环境配置、参数调优、Nav2集成等关键步骤,显著提升机器人在动态环境中的定位精度和重定位效率。

weixin_29292535的博客 148

TensorFlow_PyTorch实战:构建AI人工智能回归模型

回归分析是机器学习的核心任务之一,用于预测连续型目标变量(如房价、股票价格、用户留存时间等)。基础线性回归模型的数学原理与代码实现多项式回归模型的过拟合处理与正则化技巧自定义数据集加载与数据预处理流程动态图(PyTorch)与静态图(TensorFlow)的编程范式对比模型评估指标与可视化分析方法核心概念:对比两大框架的架构设计,解析回归模型核心组件数学原理:推导线性回归的假设函数、损失函数及优化算法算法实现:提供TensorFlow和PyTorch的完整代码示例项目实战。

AI天才研究院 1429

【Java】反射

Class Field Constructor Method Field 获取字段 Field 获取属性 获取构造方法 使用 Constructor 构造对象 构造实例 使用 Method 调用方法

粉墨白伶的博客 541

2025电赛嵌入式:K210教程-如何刷固件 如何烧录代码 全网唯一

本文介绍了K210开发板的固件刷写和开发环境搭建方法。主要内容包括:1)从Sipeed官网下载合适的MaixPy固件,根据需求选择完整版或精简版;2)使用k-flash等工具烧录固件,注意区分亚博和Sipeed开发板的固件版本;3)介绍了擦除闪存的两种模式(部分擦除和完全擦除)及其应用场景;4)搭建CanMV开发环境,通过MaixPy IDE连接开发板并进行程序调试。文章还提供了常见问题的解决方法,如串口驱动安装、固件兼容性检查等,为K210开发提供了完整的入门指南。

FJN110的博客 546

Java之通过Class类获取类信息

1、获取类信息 Class<People> peopleClass = People.class; 2、获取公共的方法,包括继承的公有方法 Method[] methods = peopleClass.getMethods(); 3、找到方法 目的是调用它 methods[i].invoke(people) 4、访问私有方法 peopleClass....

LemonSnm的博客 1595

在 ABAP 平台配置 OAuth 2.0 Client(OA2C_CONFIG):一份可落地的全景实践

本文详细介绍了在ABAP平台中配置OAuth 2.0客户端的完整流程。重点讲解了四种授权类型(Client Credentials、Authorization Code、SAML 2.0 Bearer Assertion、Resource Owner Password Credentials)的适用场景和配置要点,以及客户端认证的三种方式(Client Secret、Client Certificate、mTLS)。文章提供了操作步骤、排错建议和工程实践指导,包括端点配置、回调地址管理、scopes设置等关

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 355

如何调试10G/25G以太网IP自协商/Link Training

如果是40G/50G, 100G以太网,选的是多通道的IP,务必保证两端的通道0是正确对接上的,因为在做自协商的时候,以太网只使用通道0,其它通道需在自协商完成后再加入工作。b. 自协商的工作完全由IP自动完成的,所以只要配置没问题,你只需要耐心等待就可以看到自协商的完成,以an_good_check为标志,并且进入下一步linktraining。c. 在LT的过程中,首先你要等到IP能够锁定LT帧,即frame_lock拉高,然后你就可以进行你自己的LT算法了,与AN不同LT是由客户手动完成的。

qq_43416206的博客 1509

类方法学习二:getClasses()、getDeclaredClasses()

一.定义 Class[] getDeclaredClasses() 返回类中定义的公共、私有、保护的内部类 Class[] getClasses() 返回类定义的公共的内部类,以及从父类、父接口那里继承来的内部类 转载于:https://www.cnblogs.com/jasonxcj/p/4795718.html...

weixin_34318326的博客 216

36、真核生物RNA PolII启动子预测相关研究

本文综述了真核生物RNA聚合酶II启动子预测的研究进展,涵盖转录调控机制、核心启动子元件(如TATA框、INR、GC框)、转录因子结合位点预测的挑战与方法。介绍了基于权重矩阵、神经网络和隐马尔可夫模型等多种启动子预测算法,并探讨了启动子分类策略及评分加权方法。通过Hertz-Stormo-Hartzell流程和基因微阵列分析实例,展示了如何识别保守调控序列。文章还总结了当前预测技术的局限性,提出了整合多组学数据、开发深度学习模型、加强实验验证等未来研究方向,旨在提升启动子识别的准确性与生物学意义。

palm99的专栏 187

通过JUnit源码分析学习编程的奇技淫巧

合集 - 威哥爱编程(17)1.35个Redis企业级性能优化点与解决方案06-252.对比传统数据库,TiDB 强在哪?谈谈 TiDB 的适应场景和产品能力06-253.深度长文解析SpringWebFlux响应式框架15个核心组件源码07-044.Nginx性能调优5招35式不可不知的策略实战07-085.Java Executors类的9种创建线程池的方法及应用场景分析07-096.Redi...

weixin_42027290的博客 335

IPD流程中的RR\OR\IR\PB\SR\AR\CR等名词汇总(基于新的产品包需求架构)

RR:Raw Requirement,原始需求=》IR:Initial Requirement,初始需求=》SR:System Requirement,系统需求=》AR:Allocated Requirement,分配需求=》CR:Process Change Requirement,流程变更需求。

a1809032425的博客 3190

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【spring源码分析】IOC容器初始化(一)

前言:spring主要就是对bean进行管理,因此IOC容器的初始化过程非常重要,搞清楚其原理不管在实际生产或面试过程中都十分的有用。在【spring源码分析】准备工作中已经搭建好spring的环境,并利用xml配置形式对类进行了实例化。在test代码中有一个非常关键的类ClassPathXmlApplicationContext,在这个类中实现了IOC容器的初始化,因此我们从ClassPathX...

weixin_30587025的博客 161

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

springboot教务系统实验室系统实验报告_gpa35-vue

springboot教务系统实验室系统实验报告_gpa35-vue是一个基于Spring Boot和Vue.js的全栈项目,旨在为高校教务管理提供实验室管理与实验报告提交的数字化解决方案。系统整合了后端API与前端交互功能,支持学生、教师及管理员的多角色操作。

豆包程序员 550

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

UE5源码分析之Editor——AudioEditor模块全面分析

AudioEditor模块分析摘要 AudioEditor是UE5中负责音频资产编辑的核心模块,主要提供SoundCue、SoundClass和SoundSubmix三大图形化编辑器工具。该模块包含100+源文件,分为公开接口和私有实现层,依赖CoreUObject、Engine、GraphEditor等核心模块,并集成libsndfile等第三方音频库。 关键特性包括: SoundCue节点编辑器 - 可视化编排音频播放逻辑 SoundClass层级管理器 - 控制音频分组和音量 SoundSubmix混

chouchouxia的博客 513

学习java怎么样?后期能挣钱吗?

一般像这样的大企业都有好几轮面试,所以自己一定要花点时间去收集整理一下公司的背景,公司的企业文化,俗话说「知己知彼百战不殆」,不要盲目的去面试,还有很多人关心怎么去跟HR谈薪资。这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我的是多少?你说我这边希望可以有一个20%涨薪。

2401_84023482的博客 1066

工程师基本功四大支柱:语言内功、工程化、系统思维与沟通抽象

软件开发基本功是支撑高质量交付的底层能力体系,其核心在于对编程语言运行机制的直觉理解、工程化实践(Git规范、依赖管理、自动化测试、可观测性)、全链路系统思维以及技术到业务的语言转化能力。这些能力共同构成代码可维护性、故障可追溯性与团队协作效率的基础保障。尤其在微服务架构与云原生演进背景下,扎实的基本功比框架熟练度更能决定线上稳定性与迭代速度。本文聚焦Java/Python/Go等主流语言场景下的真实工程痛点,如空指针定位、SQL索引失效、日志缺失traceId、接口变更不同步等典型问题,系统梳理可日常锤炼

unixboy 496

Java知识体系(2021最新版)

Linux系统Maven私服搭建(Nexus3)三步曲:https://blog.youkuaiyun.com/libusi001/article/details/99659903 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Linux下maven私服搭建(5):开发人员使用参考手册 ...

慕白Lee的博客 3139

Android进阶之旅 - 系统架构篇

1.分享的简介自定义View部分已经结束,了解具体详情请移步Android进阶之旅 - 自定义View篇。按照原定的计划,决定分享Android 进阶之旅 - 系统架构篇。很多博客都有设计模式的一些理论讲解,我也曾经阅读过不少,对我个人也有很大的帮助,但整体来讲都比较零散,主要都是讲一些理论的知识。所以我决定出一整套系统架构的文章和视频,从设计模式的理论出发将Android源码与实战事例结合,来帮助

z240336124的专栏 2102

最新程序员想在深圳扎根,除了去腾讯,还可以考虑一下这些公司,java面试简历项目

一般像这样的大企业都有好几轮面试,所以自己一定要花点时间去收集整理一下公司的背景,公司的企业文化,俗话说「知己知彼百战不殆」,不要盲目的去面试,还有很多人关心怎么去跟HR谈薪资。这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我的是多少?你说我这边希望可以有一个20%涨薪。

2401_84558326的博客 1097

搜狐畅游Java笔试复盘:题型考点与避坑指南

Java后端笔试不仅考察语言基础,更看重对集合源码、JVM内存模型、并发编程等核心知识的深度理解。面对常见的OutOfMemoryError、编译版本不匹配等报错,能否快速定位根因,往往体现了候选人的实战积累。同时,HashMap扩容、快排分治、SpringBoot自动装配等高频考点,也需要在真实场景中灵活运用。从基础语法到算法coding,再到框架设计,系统性掌握知识网络,才能在秋招笔试中脱颖而出。本文以搜狐畅游Java岗笔试题型为样本,拆解各部分考点分布、解题思路与避坑经验,为准备游戏公司或中小型互联网

weixin_34060299的博客 527

老赵点滴:一份.NET程序员的职业成长契约

编程之美并非语法糖的视觉呈现,而是逻辑清晰、边界明确、可推演可传承的系统性表达;它根植于对.NET运行时机制(如MemoryPool<T>内存复用、HttpClientFactory连接池)的深度理解,体现为在真实生产场景中识别风险、建立契约、规避反模式的能力。这种能力超越工具使用,直指开发者从‘能跑通代码’到‘能设计系统’的认知跃迁,支撑高可用架构、高效Code Review与跨代际技术决策。本文以国内标杆级.NET技术博客‘老赵点滴’为范本,解析其问题驱动、可证伪、重意图翻译的工程化知识沉淀路径。

440

.NET技术博客的人格化表达与工程化实践

技术博客不仅是知识载体,更是开发者职业能力的延伸界面。从.NET生态的强类型、可维护性设计哲学出发,理解技术传播的本质在于降低系统熵增、提升组织协同效率。真正的高质量技术内容,需融合人文视角与工程严谨性——既关注代码在生产环境中的可观测性、权限最小化与伦理审查,也重视读者认知路径中的情感锚点与场景代入。以‘先做人,再做技术人员,最后做程序员’为能力演进主线,将抽象API转化为可验证、可复现、可降级的工业级方案,正是当前.NET开发者应对架构决策、团队传承与AOT迁移等现实挑战的核心能力。老赵点滴的十年实践,

451
上一篇: 开发日常小结(34):源码分析:String类的equals()方法
下一篇: 开发日常小结(36):源码分析:String类的substring(int beginIndex, int endIndex)方法
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值