当前位置: 首页 > 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;对电网企业综合能源服务…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...