Java反射系列--方法大全
原文网址:Java反射系列--方法大全_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Java反射相关的方法。
Class相关方法
方法 | 说明 |
getName() | 返回String形式的该类的名称。 |
newInstance() | 根据某个Class对象产生其对应类的实例,它调用的是此类的默认构造方法(没有默认无参构造器会报错) |
getClassLoader() | 返回该Class对象对应的类的类加载器。 |
getSuperClass() | 返回某子类所对应的直接父类所对应的Class对象 |
getComponentType() | 如果当前类表示一个数组,则返回表示该数组组件的 Class 对象,否则返回 null。 |
getConstructor(Class[]) | 返回当前 Class 对象表示的类的指定的公有构造子对象。 |
getConstructors() | 返回当前 Class 对象表示的类的所有公有构造子对象数组。 |
getDeclaredConstructor(Class[]) | 返回当前 Class 对象表示的类的指定已说明的一个构造子对象。 |
getDeclaredConstructors() | 返回当前 Class 对象表示的类的所有已说明的构造子对象数组。 |
getDeclaredField(String) | 返回当前 Class 对象表示的类或接口的指定已说明的一个域对象。 (获取指定的一个公共的字段,包括继承的) |
getDeclaredFields() | 返回当前 Class 对象表示的类或接口的所有已说明的域对象数组。 (获取公共和私有的属性(private、public、protected,和访问权限无关),不包括继承)。 |
getDeclaredMethod(String, Class[]) | 返回当前 Class 对象表示的类或接口的指定已说明的一个方法对象。 |
getDeclaredMethods() | 返回 Class 对象表示的类或接口的所有已说明的方法数组。 |
getField(String) | 返回当前 Class 对象表示的类或接口的指定的公有成员域对象。 (获取指定的public的字段,包括继承的) |
getFields() | 返回当前 Class 对象表示的类或接口的所有可访问的公有域对象数组。 (可以获取自身和继承公共的属性) (可以获取公共的属性(public的),包括继承)。 |
getInterfaces() | 返回当前对象表示的类或接口实现的接口。 |
getMethod(String, Class[]) | 返回当前 Class 对象表示的类或接口的指定的公有成员方法对象。 |
getMethods() | 返回当前 Class 对象表示的类或接口的所有公有成员方法对象数组,包括已声明的和从父类继承的方法。 |
isArray() | 判定此Class对象所对应的是否是一个数组对象 |
isInstance(Object) | 此方法是 Java 语言 instanceof 操作的动态等价方法。 |
isInterface() | 判定指定的 Class 对象是否表示一个接口类型 |
isPrimitive() | 判定指定的 Class 对象是否表示一个 Java 的基类型。 |
获取接口/父类/构造方法
方法 | 说明 |
Class<?>[] c1 = c.getInterfaces(); | 取得实现的接口 |
Class<?> c2 = c.getSuperclass(); | 取得父类 |
Constructor<?> con[] = c.getConstructors(); | 取得构造函数 |
获取方法数据
方法 | 说明 |
Method getMethod(String name, Class<?>... parameterTypes) | 通过方法名和参数列表获得方法 |
Method[] getMethods() | 获得所有方法。 反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共(public) member 方法。 |
Method getDeclaredMethod(String name, Class<?>... parameterTypes) | |
Method[] getDeclaredMethods() | 反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。 |
详细方法
方法 | 说明 |
int getModifiers() | 取得本方法的访问修饰符。 取得后通过Modefier.toString(xxx)还原 |
String getName() | 取得方法的名称 |
Class<?>[] getParameterTypes() | 得到方法的全部参数类型 |
Class<?> getReturnType() | 得到方法的返回值类型 |
CIass<?>[] getExceptionType() | 得到一个方法的全部抛出异常 |
实例
package org.example.a;import java.lang.reflect.Method;
import java.lang.reflect.Modifier;interface ICategory {public static final String CATEGORY_NAME = "Human";public void sayCategory();public String sayHello(String name, Integer age);
}class Human implements ICategory {private String name;private Integer age;public Human() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic void sayCategory() {System.out.println(CATEGORY_NAME);}@Overridepublic String sayHello(String name, Integer age) {return "名字:" + name + "年龄:" + age;}
}public class Demo {public static void main(String[] args) {Class<?> c = null;try {c = Class.forName("org.example.a.Human");} catch (Exception e) {e.printStackTrace();}Method m[] = c.getMethods();for (int i = 0; i < m.length; i++) {Class<?> r = m[i].getReturnType();Class<?> p[] = m[i].getParameterTypes();int xx = m[i].getModifiers();System.out.print(Modifier.toString(xx) + " ");System.out.print(r.getName() + " ");System.out.print(m[i].getName());System.out.print("(");for (int x = 0; x < p.length; x++) {System.out.print(p[x].getName() + " " + "arg" + x);if (x < p.length - 1) {System.out.print(", ");}}System.out.print(")");Class<?> ex[] = m[i].getExceptionTypes();if (ex.length > 0) {System.out.print(" throws ");for (int j = 0; j < ex.length; j++) {System.out.print(ex[j].getName());if (j < ex.length - 1) {System.out.print(",");}}}System.out.println();}}
}
执行结果
public java.lang.String getName()
public void setName(java.lang.String arg0)
public java.lang.String sayHello(java.lang.String arg0, java.lang.Integer arg1)
public java.lang.Integer getAge()
public void setAge(java.lang.Integer arg0)
public void sayCategory()
public final void wait() throws java.lang.InterruptedException
public final void wait(long arg0, int arg1) throws java.lang.InterruptedException
public final native void wait(long arg0) throws java.lang.InterruptedException
public boolean equals(java.lang.Object arg0)
public java.lang.String toString()
public native int hashCode()
public final native java.lang.Class getClass()
public final native void notify()
public final native void notifyAll()
获取属性
方法 | 说明 |
Field getField(String name) | 根据属性名称获取public属性 |
Field[] getFields() | 获得该类所有的public属性 |
Field getDeclaredField(String name) | 根据属性名称获取属性。private属性也可获取 |
Field[] getDeclaredFields() | 获得该类所有的属性。private属性也可获取 |
详细方法
方法 | 说明 |
Object get(Object obj) | 获得一个对象中属性的具体内容 |
void set(Object obj,Object value) | 设置指定对象中属性的具体内容 |
int RetModifiers() | 获得属性的修饰符 |
String getName() | 获得此属性的名称 |
boolean isAccessible() | 判断此属性是否可被外部访问 |
void setAccessible(boolean flag) | 设置一个属性是否可被外部访问 |
static void setAccessibie(AccessibIeObject[] array,boolean flag) | 将一组属性设置是否可被外部访问 |
String toString() | 返回此Field类的信息 |
示例
package org.example.a;import java.lang.reflect.Field;
import java.lang.reflect.Modifier;interface ICategory {public static final String CATEGORY_NAME = "Human";public void sayCategory();public String sayHello(String name, Integer age);
}class Human implements ICategory {private String name;private Integer age;public Human() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic void sayCategory() {System.out.println(CATEGORY_NAME);}@Overridepublic String sayHello(String name, Integer age) {return "名字:" + name + "年龄:" + age;}
}public class Demo {public static void main(String[] args) {Class<?> c = null;try {c = Class.forName("org.example.a.Human");} catch (Exception e) {e.printStackTrace();}Field f[] = c.getDeclaredFields();System.out.println("本类属性: ");for (int i = 0; i < f.length; i++) {Class<?> r = f[i].getType();int mo = f[i].getModifiers();String priv = Modifier.toString(mo);System.out.print(priv + " ");System.out.print(r.getName() + " ");System.out.print(f[i].getName());System.out.println(";");}System.out.println("-------------------------------------------");Field f1[] = c.getDeclaredFields();System.out.println("公共属性: ");for (int i = 0; i < f1.length; i++) {Class<?> r = f1[i].getType();int mo = f1[i].getModifiers();String priv = Modifier.toString(mo);System.out.print(priv + "");System.out.print(r.getName() + " ");System.out.print(f1[i].getName());System.out.println(";");}}
}
执行结果
本类属性:
private java.lang.String name;
private java.lang.Integer age;
-------------------------------------------
公共属性:
privatejava.lang.String name;
privatejava.lang.Integer age;
获取注解
Method, Constructor, Field这三个类对象都可以判断是否有特定的注解类,方法是:boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
示例
本处使用枚举类示例,普通类类似的。
package org.example.a;import java.lang.reflect.Field;enum Color{@DeprecatedRED,GREEN,BLUE
}public class Demo {public static void main(String[] args) {for (Color value : Color.values()) {Field field = null;try {field = Color.class.getField(value.name());} catch (NoSuchFieldException e) {e.printStackTrace();}if (field.isAnnotationPresent(Deprecated.class)) {System.out.println(value.name() + "上有注解类:" + Deprecated.class.getName());}}}
}
执行结果
RED上有注解类:java.lang.Deprecated
操作数组
方法 | 说明 |
Class<?> getComponentType() | 取得一个数组的Class对象 |
详细方法
方法 | 说明 |
static Object get(Object array,int index) | 根据下标取得数组内容 |
static Object newlnstance(Class<?> componentType, int length) | 根据己有的数组类型开辟新的数组对象 |
static void set(Object array,int index,Object value) | 修改指定位置的内容 |
相关文章:
Java反射系列--方法大全
原文网址:Java反射系列--方法大全_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java反射相关的方法。 Class相关方法 方法 说明 getName() 返回String形式的该类的名称。 newInstance() 根据某个Class对象产生其对应类的实例,它调用的是此类的默认构…...
LeetCode 169. 多数元素
LeetCode 169. 多数元素 难度:easy\color{Green}{easy}easy 题目描述 给定一个大小为 nnn 的数组 numsnumsnums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊n/2⌋⌊ n/2 ⌋⌊n/2⌋ 的元素。 你可以假设数组是非空的,并且给…...
来了,metaIPC1.0
metaRTC推出metaIPC正式版1.0,基于metaRTC6.0最新版二次开发,metaIPC是为嵌入式/摄像头量身打造的webRTC版IPC Camera,可安装在国内大多数Soc芯片上,如在君正/瑞芯微/MSTAR/海思等等已经有多个成熟产品应用。 New Feature 支持M…...
WireShark如何进行USB包协议分析
USB协议学习的步骤之一就是从抓包看协议通信,进而学习usb设备开发是怎么回事。这里发现一个工具就是wireshark。 WireShark如果要抓取usb设备的包,需要在安装的时候,选择usbpcap一并进行安装。...
蒙特卡洛随机模拟
蒙特卡洛随机模拟 简介 蒙特卡洛模拟是在计算机上模拟项目实施了成千上万次,每次输入都随机选择输入值。由于每个输入很多时候本身就是一个估计区间,因此计算机模型会随机选取每个输入的该区间内的任意值,通过大量成千上万甚至百万次的模拟…...
Android从屏幕刷新到View的绘制(三)之Handler异步消息与同步屏障
0. 相关分享 Android从屏幕刷新到View的绘制(一)之 Window、WindowManager和WindowManagerService之间的关系 Android从屏幕刷新到View的绘制(二)之Choreographer、Vsync与屏幕刷新 1. 相关类 Handler Handler中维护着它所在的…...
最新版axios@1.3.x取消请求-AbortController-初体验-番茄出品
最新版axios1.3.x取消请求-AbortController-初体验-番茄出品 start 前文提到,axios 中的取消请求,包含两种方式: AbortController;CancelToken; 上篇文章讲解了 CancelToken,今天这篇文章来了解一下 Abor…...
Git的简述
Git 文章目录GitGit概述版本控制工具集中式管理控制工具分步式管理控制工具控制机制Git和代码托管中心安装Git软件Git常用命令Git概述 Git是一个免费的、开源的分步式版本控制系统,可以快速的处理从小型到大型的各种项目 Git 易于学习,占地面积小&…...
webpack实战,手写loader和plugin
序言 对于 webpack 来说, loader 和 plugin 可以算是需求程度最为广泛的配置项了。但是呢,单单止步于配置可能还不够。如果我们自己有时候想要 diy 一个需求,但是 webpack 又没有相关的 loader 和 plugin 。那这个时候我们可能就得开始造点轮…...
STM32CubeMX按键模块化 点灯
本文代码使用 HAL 库。 文章目录前言一、按键原理图二、CubeMX 创建工程三、代码讲解:1. GPIO的输入HAL库函数:2. 消抖:3. 详细代码四,实验现象:总结前言 我们继续讲解 stm32 f103,这篇文章将详细 为大家讲…...
C#专栏目录(长期更新)
文章目录C# 基础C#进阶C#应用WPF基础WPF 3D小游戏C# 基础 1996年,微软用年薪三百万美刀的价格从Borland挖来了大神海尔斯伯格,开始了J开发,用以对抗Java。但SUN公司认为此举违反了Java开发平台的中立性,对微软提出诉讼。C#正是在…...
BurpSuite配置抓取HTTPS数据包
简介 我们在渗透测试的过程中,经常会遇到HTTPS的网站,Burp默认是没有办法抓取HTTPS的包的,想要让Burp抓取Https的包也很好办,只需要浏览器安装相关的证书即可,接下来将配置过程做一个记录。 前置条件: 1.J…...
图片转base64格式返回给前端,前端如何展示?
图片以base64形式在页面上展示出来在这里要说到Data URI scheme,它可以直接将一些小的数据直接嵌入到网页中,不需要再引入。支持格式如下data:, 文本数据data:text/plain, 文本数据data:text/html, HTML代码data:text/html;base64, base64编码的HTML代码…...
C++入门知识【超详解】
目录1.认识Chello worldC关键字2.命名空间3.std标准库4.输入输出5.缺省参数6.函数重载7.引用7.1引用的概念7.2引用的场景1.作参数2.作返回值7.3引用的注意点7.4指针和引用的区别8.auto关键字9.基于范围的for循环10.内联函数10.1概念10.2特征11. C98中的指针空值1.认识C hello …...
零基础、非计算机系学Python该如何上手?
首先我觉得要放平心态,不用过多去纠结是不是专业出身这回事。 想学那就认真去学,我们最终目标是掌握Python这门技能。 非计算机专业同时零基础,想自学Python该如何上手?分享我自学Python的几点建议吧。 1、重视基础 Python是一…...
关于 vue3 模板引用
文章目录前言1.访问模板引用2.v-for中的模板引用3.组件上的ref前言 如果我们需要直接访问组件中的底层DOM元素,可使用vue提供特殊的ref属性来访问 1.访问模板引用 在视图元素中采用ref属性来设置需要访问的DOM元素 a. 该ref属性可采用字符值的执行设置 b. 该ref属…...
Redis | 安装Redis和启动Redis服务
目录 一、Redis简介 1.1 简介 二、Redis安装 2.1 Windows安装Redis 2.2 Linux安装Redis 三、Redis服务启动和停止 3.1 Windows启动Redis服务 3.2 Linux启动Redis服务 四、Redis设置密码远程连接 4.1 为Redis登陆设置密码 4.2 设置Redis允许远程连接 五、Redis常…...
博客要考虑的最佳WordPress主题
有太多的选择会瘫痪你做决定的能力。有太多的WordPress主题,但仅仅只需要一个并且它是要合适的。我们建立了数十个 WordPress 博客并安装了数百个主题。根据我们所有的经验,我们发现Newspaper是大多数用户的最佳WordPress博客主题。这个自适应、强大的主…...
C 学习笔记 —— 函数指针
函数指针 上面的第二个char (* f) (int);写法就是函数指针的声明; 首先,什么是函数指针?假设有一个指向 int类型变量的指针,该指针储存着这个int类型变量储存在内存位置的地址。 同样,函数也有地址,因为函…...
FastDDS-3. DDS层
3. DDS层 eProsima Fast DDS公开了两个不同的API,以在不同级别与通信服务交互。主要API是数据分发服务(DDS)数据中心发布订阅(DCPS)平台独立模型(PIM)API,简称DDS DCPS PIM…...
9.2 IGMPv2
实验目的 (1) 熟悉IGMPv2的应用场景 (2) 掌握IGMPv2的配置方法 实验拓扑 实验拓扑如图9-17所示: 图9-17:IGMPv2 实验步骤 配置IP地址(请参考上一个实验)运行IGPÿ…...
巨头混战,抢着“兜底”自动驾驶安全
诚然,中国汽车行业的发展绝对不会拘泥于电动化,必定会在电动化的基础上,迎接下半场的快速智能化。 2021年6月,长城汽车线控底盘全球首次发布。 彼时,长城汽车技术副总裁宋东先宣布,整合了线控转向、线控制…...
RightCapital 第一轮面试题
现在我们就马上开始吧! 答案在文末 JavaScript 是一门单线程的静态类型语言(单选题) 正确 错误 在 JavaScript 中下面哪种类型的值是不可变的(immutable)(单选题) Object Symbol Array Date …...
Python曲线肘部点检测-膝部点自动检测
文章目录一. 术语解释二. 拐点检测肘部法则是经常使用的法则。很多时候,可以凭人工经验去找最优拐点,但有时需要自动寻找拐点。最近解决了一下这个问题,希望对各位有用。一. 术语解释 **肘形曲线(elbow curve)**类似人胳膊状的曲线ÿ…...
【算法题】最大矩形面积,单调栈解法
力扣:84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 题意很简单,翻译一下就是:求该图中…...
活动策划|深度分析年货节活动该如何策划!
四月初,不平凡的初春开始恢复往日的平静。对于新零售行业,疫情的缓解也逐渐平稳生态链的运转。2020年新零售的格局在洗礼后,业务的聚焦点也从前端促销转移到后端履约的体验闭环,同时很大程度的推进企业在危机公关下的应对。618大促…...
Idea启动遇到 Web server failed to start. Port 8080 was already in use. 报错
Idea启动遇到问题-记录 报错英文提示: APPLICATION FAILED TO START Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to liste…...
Python3中zip()函数知识点总结
1.引言 在本文中,我将带领大家深入了解Python中的zip()函数,使用它可以提升大家的工作效率。 闲话少说,我们直接开始吧! 2. 基础知识 首先,我们来介绍一些基础知识点: Python中的某些数据类型是不可变的…...
过滤器,监听器,拦截器的原理与在Servlet和Spring的应用
在Java Web的开发中,最原始和初期的学习都是从Servlet开始的,Servlet是Java最为耀眼的技术,也是Java EE的技术变革。目前大火主流的框架spring boot也的spring mvc部分也是基于拓展servlet完成的。回到之前的文章spring 实现了对servlet的封装…...
minio spring boot 秒传、分片上传、断点续传文件实现
此处后端使用的是前期封装的自定义starter,具体链接可参考:minio对象存储spring boot starter封装组件 这里主要针对前期封装的组件,做一个简单的应用,前端直传可查看之前的文章 秒传 秒传的逻辑比较简单,在前传上传…...
wordpress文章采集插件/广告投放网站平台
在使用word2vec对文本进行分析时能产生一个bin文件,可以用ANSJ调用该文件得到相近词,等同于替换 ./distance vectors.bin命令。 代码如下: import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.FileInputSt…...
珠海房地产网站建设/网络营销推广的渠道有哪些
返回“我的文档”路径字符串 Environment.GetFolderPath(Environment.SpecialFolder.Personal)本技巧使用GetFolderPath方法来获取指向由指定枚举标识的系统特殊文件夹的路径。语法格式如下: public static string GetFolderPath (SpecialFolder folder) 参数folder…...
c2c网站开发/如何做网站搜索引擎优化
第一部分 WEB层均衡负载.net平台下,我目前部署过的均衡负载有两种方式(iis7和Nginx),以下以Nginx为例讲解web层的均衡负载. 简介:Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多&#x…...
开网站做彩票赚钱吗/关键词搜索优化外包
关键词缩写全称注释单指令单数据流系统SISDsingle instruction single data即传统冯诺依曼结构单指令多数据流系统SIMDsingle instruction multiple data阵列处理器和向量处理器系统多指令单数据流系统MISDmultiple instruction single data不存在多指令多数据流系统MIMDmultip…...
php怎么做网站/国际大新闻最新消息
计算机组成原理A形成性考核作业二(参考答案)一、选择题:1.计算机硬件能直接识别和运行的只能是_______程序。A.机器语言 B.汇编语言 C.高级语言 D.VHDL答:A2.指令中用到…...
嘉兴网站制作软件/白嫖永久服务器
桓峰基因的教程不但教您怎么使用,还会定期分析一些相关的文章,学会教程只是基础,但是如果把分析结果整合到文章里面才是目的,觉得我们这些教程还不错,并且您按照我们的教程分析出来不错的结果发了文章记得告知我们&…...