当前位置: 首页 > news >正文

java的反射

在java语言中,反射机制是指对于处在运行状态的类,都能够获取到这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意一个方法以及访问它的属性;这种通过动态获取类或对象的属性以及方法从而完成调用功能被称为java语言的反射机。

它主要实现以下功能: 

  1. 获取类的访问修饰符、方法、属性以及父类信息。
  2. 在运行时根据类的名字创建对象。可以在运行时调用任意一个对象的方法。
  3. 在运行时判断一个对象属于哪个类。
  4. 生成动态代理。 

在反射机制中Class是一个非常重要的类,在java语言中获取Class对象主要有如下方法。

通过className.class来获取 

class A{static{System.out.println("static block");}{System.out.println("dynamic block");}}class Test{public static void main(String[] args){Class<?> c=A.class;System.out.println("className:"+c.getName());}
}
// 运行结果为:className:A

 通过Class.forName()来获取

public static void main(String[] args){Class<?> c=null;try{c=Class.forName("A");}catch(Exception e){e.printStackTrae();}System.out.println("className:"+c.getName());
}// 程序运行结果为:
// static block 
// className:A

通过Object.getClass()来获取

public static void main(String[] args){Class<?>c=new A().getClass();System.out.println("className:"+c.getName());
}
// 程序运行结果:
// static block
// dynamic block
// className:A

区别 

从上面的例子可知,虽然这三种方式都可以获得类的Class对象,但是它们还是有区别的,主要区别如下:

  • 方法1 不执行静态块和动态构造块。
  • 方法2 只执行静态块,而不执行动态构造块。
  • 方法3 因为需要创建对象,所以会执行静态块和动态构造块。

方法 

1. 获取类的构造方法。

  1. public Constructor<?>[] getConstructors(): 返回类的所有的public构造方法。
  2. public Constructor<T> getConstructor(Class<?> ... parameterTypes): 返回指定的public构造方法。
  3. public Constructor<?>[] getDeclaredConstructors()" 返回类的所有的构造方法。
  4. public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes): 返回指定的构造方法 

2. 获取类的成员变量的方法

  1. public Field[] getFields(): 获取类的所有public成员变量.
  2. public Field getField(String name): 获取指定的public成员变量;
  3. public Field[] getDeclaredFields(): 获取类的所有成员变量。
  4. public Field getDeclaredField(String name): 获取任意访问权限的指定名字的成员变量。 

3. 获取类的方法

  1. public Method[] getMethods():
  2. public Method getMethod(String name,Class<?>... parameterTypes) public Method[];
  3. getDeclaredMethods(): 获取所有的方法
  4. public Method getDeclaredMethod(String name,Class<?>...parameterTypes).

使用实例 

public class Test{protected Test(){System.out.println("Protected constructor");}public Test(String name){System.out.println("Public constructor");}public void f() {System.out.println("f()");}public void g(int i){System.out.println("g():"+i);}class Inner{}public static void main(String[] args)throws Exception{Class<?> clazz=Class.forName("Test");Constructor<?>[] constructors=clazz.getDeclaredConstructors();System.out.println("Test类的构造方法");for(Constructor<?> c:constructors){System.out.println(c);}Method[] methods=clazz.getMethods();System.out.println("Test的全部public方法:")for(Method md : methods){System.out.println(md);}Class<?> inners=clazz.getDeclaredClasses();System.out.println("Test类的内部类为:");for(CLsss<?> c:inners){System.out.println(c);}}}// 程序运行结果为:
// Test类的构造方法
// protected Test()
// public Test(java.lang.String)
// Test的全部public方法:
// public static void Test.main(java.lang.String[] args)throws java.lang.Exception
// public void Test.f()
// public void Test.g(int)
// public final void java.lang.Object.wait() throws java.lang.InterruptedException
// 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 boolean java.lang.Object.equals(java.lang.Object)
// publicjava.lang.Sring 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()
// Test类的内部类为
// class Test$Inner

 

相关文章:

java的反射

在java语言中&#xff0c;反射机制是指对于处在运行状态的类&#xff0c;都能够获取到这个类的所有属性和方法。对于任意一个对象&#xff0c;都能够调用它的任意一个方法以及访问它的属性&#xff1b;这种通过动态获取类或对象的属性以及方法从而完成调用功能被称为java语言的…...

MySQL — InnoDB 锁

文章目录 锁共享锁和排他锁意向锁记录锁间隙锁临键锁插入意向锁自增锁 锁 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前&#xff0c;先向系统发出请求&#xff0c;对其加锁。加锁后事务就对该数据对象有了一定的控制&#xff0c;在该事务…...

首批获得金融级行业云平台认证,天翼云深耕行业云

云计算下半场看什么&#xff1f; 无疑是金融、政务、制造等传统政企用户的上云与用云。随着数字经济发展和产业数字化的提速&#xff0c;上云已是政企用户推动其数字化转型不断深入的重要抓手&#xff0c;成为不可阻挡的趋势。 与互联网用户相比&#xff0c;政企用户上云极为…...

浅谈Python解释器的组成

Python解释器是一个复杂的软件&#xff0c;它可以解释和执行Python代码。以下是Python解释器的主要组成部分&#xff1a; 源代码词法分析器&#xff08;Lexical Analyzer&#xff09;: 这部分的任务是将输入的Python源代码分解成称为"tokens"的基础元素。例如&#x…...

服务限流治理

一、基础概念 1.什么是服务限流&#xff1f; 限流在日常生活中也很常见&#xff0c;比如节假日你去一个旅游景点&#xff0c;为了不把景点撑爆&#xff0c;管理部门通常会在外面设置拦截&#xff0c;限制景点的进入人数&#xff08;等有人出来之后&#xff0c;再放新的人进去…...

机器学习笔记 - 使用CLIP在没有数据的情况下创建图像分类器

想象一下,如果我们现在需要对人们是否戴眼镜进行分类,但您没有数据或资源来训练自定义模型。该怎么办?这里我们了解如何使用预先训练的 CLIP 模型来创建自定义分类器,而无需任何培训。这种方法称为零样本图像分类,它可以对原始 CLIP 模型训练期间未明确看到的类别图像进行…...

42.利用 牛顿迭代法解非线性高维方程组(matlab程序)

1.简述 若向量记号为X,方程组就可以写成F(X)0的形式。 我们知道&#xff0c;对于一元函数的牛顿迭代法求根公式 类似的&#xff0c;对于多元函数求根公式 其中X是向量&#xff0c;是非线性方程组对应的雅可比矩阵。 具体求解的时候&#xff0c;我们可以先通过绘图命令绘制图形…...

我在leetcode用动态规划炒股

事情是这样的&#xff0c;突然兴起的我在letcode刷题 121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III 以上三题。 1. 121. 买卖股票的最佳时机 1.1. 暴力遍历&#xff0c;两次遍历 1.1.1. 算法代码 public class Solution {public int Ma…...

rust实践-异步并发socket通信

客户端 [package] name = "rust_client" version = "0.1.0" edition = "2021"[dependencies] tokio = {version = "1.14.0", features = ["full"] }use tokio::io::{self, AsyncReadExt, AsyncWriteExt}; use tokio::net::…...

SolidUI社区-根据Prompt打造人设

背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。SolidUI 是一个创新的项目&#xff0c;旨在将自然语言处理&#xff08;NLP&#xff09;与计算机图形学相…...

设计模式行为型——观察者模式

目录 什么是观察者模式 观察者模式的实现 观察者模式角色 观察者模式类图 观察者模式举例 观察者模式代码实现 观察者模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是观察者模式 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式…...

Kernel Exception导致手机重启案例分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、高温触发 Kernel Exception 重启问题二、解决方案三、提高电池温度方案 一、 高温触发 Kernel Exception 重启问题 手机 电池温度 默认60度以上高温…...

C++入门篇5---模板

相信大家都遇到过这么一种情况&#xff0c;为了满足不同类型的需求&#xff0c;我们要写多个功能相同&#xff0c;参数类型不同的代码&#xff0c;为此&#xff0c;C引入了泛型编程这一概念&#xff0c;而模板就是实现泛型编程的基础&#xff0c;其实本质就是我们写一个类似”模…...

L2CS-Net: 3D gaze estimation

L2CS-Net: Fine-Grained Gaze Estimation in Unconstrained Environments论文解析 摘要1. 简介2. Related Work3. METHOD3.1 Proposed loss function3.2 L2CS-Net 结构3.3 数据集3.4 评价指标 4. 实验4.1 实验结果 论文地址&#xff1a;L2CS-Net: Fine-Grained Gaze Estimation…...

kenernetes/k8s笔试面试

k8s的基础概念 k8s本质是一个容器编排系统&#xff0c;可以管理容器的生命周期&#xff0c;应用部署&#xff0c;更新&#xff0c;维护&#xff0c;应用提供服务&#xff0c;扩容缩容应用&#xff0c;故障自愈。 k8s与docker的关系 docker:是一种轻量级的虚拟化技术。运维层…...

我们真的是在做数据治理吗

我们真的是在做数据治理吗&#xff1f; 什么是数据治理&#xff1f; 数据治理和数据管理有什么区别&#xff1f; 相信即使是考过数据治理工程师的人&#xff0c;面对这2个问题也仍然会有这个疑问。 目前国际和国内对于数据治理没有明确统一的定义&#xff0c;对于数据治理的服…...

聊聊汽车电子的话题

当谈到汽车电子时&#xff0c;有许多有趣的话题可以探讨。以下是一些可能感兴趣的话题&#xff1a; 自动驾驶技术&#xff1a;自动驾驶技术正变得越来越先进&#xff0c;它们如何在汽车中实现&#xff1f;它们将如何改变我们的交通方式以及对道路安全的影响&#xff1f; 电动汽…...

ThinkPHP6企业OA办公系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP6企业OA办公系统 一 介绍 勾股OA基于ThinkPHP6开发&#xff0c;前端Layui&#xff0c;数据库mysql&#xff0c;是一款实用的企业办公系统。可多角色登录&#xff0c;集成了系统设置、人事管理、消息管理、审批管理、日常办公、客户…...

PPS Tester测量原理和实施方法

怿星科技发布了新品PPS Tester&#xff0c;这是一款基于1PPS方法的时间同步精度测试设备。PPS Tester由硬件模块ETS2110和上位机软件ePPSTester构成。本文将围绕此设备的应用场景&#xff0c;介绍相关概念和设备使用方法。 什么是时间同步&#xff1f; 时间同步就是采取某项技…...

浅谈新电改背景下电网企业综合能源服务商业模式研究及发展方向

安科瑞 华楠 摘要: 新电改方案实施后&#xff0c;由于输配电价的改革和售电侧的放开&#xff0c;电网企业的盈利模式也随之发生了变化。这就要求电网企业转变服务理念与经营方式&#xff0c;来寻求竞争优势。基于“魏朱六要素商业模式”模型&#xff0c;对电网企业综合能源服务…...

2026届最火的AI辅助写作平台解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 一种基于自然语言处理以及深度学习模型的论文一键生成技术&#xff0c;其中&#xff0c;该技…...

W25Q16 Flash存储器的5个常见应用场景及避坑指南

W25Q16 Flash存储器的5个常见应用场景及避坑指南 在嵌入式系统开发中&#xff0c;数据存储一直是个绕不开的话题。想象一下&#xff0c;你花了一周时间调试的设备&#xff0c;重启后所有用户设置都消失了&#xff1b;或者精心设计的UI界面&#xff0c;因为字库加载失败变成了乱…...

颠覆式图像分层黑科技:layerdivider让设计效率提升95%的秘密

颠覆式图像分层黑科技&#xff1a;layerdivider让设计效率提升95%的秘密 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 设计效率的革命性突破&#xff1…...

GraphRAG实战:我是如何用它分析公司内部文档,让客服响应时间缩短近30%的

GraphRAG实战&#xff1a;我是如何用它分析公司内部文档&#xff0c;让客服响应时间缩短近30%的 作为一家中型电商企业的技术负责人&#xff0c;我最近半年一直在与客服团队的一个顽固问题搏斗&#xff1a;每当新品上线或促销活动期间&#xff0c;客服人员需要花费大量时间在不…...

FastAPI 2.0流式响应性能翻倍的4个隐藏配置:uvloop优化、httpx异步客户端复用、response_model_exclude_unset调优、asyncpg连接池预热

第一章&#xff1a;FastAPI 2.0流式响应性能翻倍的全景认知FastAPI 2.0 引入了原生异步流式响应&#xff08;StreamingResponse&#xff09;的底层重构&#xff0c;通过移除中间层缓冲、直接对接 ASGI 服务器的 send 协议&#xff0c;并支持零拷贝字节流分块推送&#xff0c;显…...

别再让MATLAB并行池浪费你的内存!保姆级教程教你手动精准管理Parallel Pool

MATLAB并行池内存优化实战&#xff1a;从自动管理到精准控制 在科学计算和工程仿真领域&#xff0c;MATLAB的Parallel Computing Toolbox无疑是提升运算效率的利器。但许多资深用户都曾经历过这样的困扰&#xff1a;完成大规模并行计算后&#xff0c;发现系统内存依然被并行池占…...

OpenClaw+Qwen2.5-VL-7B:自动化生成图文报告

OpenClawQwen2.5-VL-7B&#xff1a;自动化生成图文报告 1. 为什么需要自动化图文报告 作为一名数据分析师&#xff0c;我每天都要处理大量数据并生成报告。传统的工作流程是&#xff1a;先整理Excel表格&#xff0c;然后手动截图插入PPT&#xff0c;最后撰写分析文字。这个过…...

Python 3.13.7(发布于 2025 年 8 月 14 日)在 Windows 平台上的官方下载选项列表

Python 3.13.7&#xff08;发布于 2025 年 8 月 14 日&#xff09;在 Windows 平台上的官方下载选项列表&#xff0c;包含多种架构&#xff08;x64、x86/32-bit、ARM64&#xff09;和两种分发形式&#xff1a; Windows installer&#xff1a;标准图形化安装程序&#xff08;含…...

像素剧本圣殿企业应用:中小型内容工作室剧本量产工作流搭建

像素剧本圣殿企业应用&#xff1a;中小型内容工作室剧本量产工作流搭建 1. 剧本创作新范式 在内容创作行业&#xff0c;剧本开发一直是耗时费力的核心环节。传统编剧流程中&#xff0c;一个完整剧本从构思到成稿往往需要数周甚至数月时间&#xff0c;这对于资源有限的中小型工…...

2026最权威的十大降AI率神器实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 想切实降低文本的AIGC率&#xff0c;重点在于削减机器生成的规律性迹象。给出如下方法提议&a…...