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

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反射系列--方法大全

原文网址&#xff1a;Java反射系列--方法大全_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java反射相关的方法。 Class相关方法 方法 说明 getName() 返回String形式的该类的名称。 newInstance() 根据某个Class对象产生其对应类的实例&#xff0c;它调用的是此类的默认构…...

LeetCode 169. 多数元素

LeetCode 169. 多数元素 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 给定一个大小为 nnn 的数组 numsnumsnums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊n/2⌋⌊ n/2 ⌋⌊n/2⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给…...

来了,metaIPC1.0

metaRTC推出metaIPC正式版1.0&#xff0c;基于metaRTC6.0最新版二次开发&#xff0c;metaIPC是为嵌入式/摄像头量身打造的webRTC版IPC Camera&#xff0c;可安装在国内大多数Soc芯片上&#xff0c;如在君正/瑞芯微/MSTAR/海思等等已经有多个成熟产品应用。 New Feature 支持M…...

WireShark如何进行USB包协议分析

USB协议学习的步骤之一就是从抓包看协议通信,进而学习usb设备开发是怎么回事。这里发现一个工具就是wireshark。 WireShark如果要抓取usb设备的包,需要在安装的时候,选择usbpcap一并进行安装。...

蒙特卡洛随机模拟

蒙特卡洛随机模拟 简介 蒙特卡洛模拟是在计算机上模拟项目实施了成千上万次&#xff0c;每次输入都随机选择输入值。由于每个输入很多时候本身就是一个估计区间&#xff0c;因此计算机模型会随机选取每个输入的该区间内的任意值&#xff0c;通过大量成千上万甚至百万次的模拟…...

Android从屏幕刷新到View的绘制(三)之Handler异步消息与同步屏障

0. 相关分享 Android从屏幕刷新到View的绘制&#xff08;一&#xff09;之 Window、WindowManager和WindowManagerService之间的关系 Android从屏幕刷新到View的绘制&#xff08;二&#xff09;之Choreographer、Vsync与屏幕刷新 1. 相关类 Handler Handler中维护着它所在的…...

最新版axios@1.3.x取消请求-AbortController-初体验-番茄出品

最新版axios1.3.x取消请求-AbortController-初体验-番茄出品 start 前文提到&#xff0c;axios 中的取消请求&#xff0c;包含两种方式&#xff1a; AbortController&#xff1b;CancelToken&#xff1b; 上篇文章讲解了 CancelToken&#xff0c;今天这篇文章来了解一下 Abor…...

Git的简述

Git 文章目录GitGit概述版本控制工具集中式管理控制工具分步式管理控制工具控制机制Git和代码托管中心安装Git软件Git常用命令Git概述 Git是一个免费的、开源的分步式版本控制系统&#xff0c;可以快速的处理从小型到大型的各种项目 Git 易于学习&#xff0c;占地面积小&…...

webpack实战,手写loader和plugin

序言 对于 webpack 来说&#xff0c; loader 和 plugin 可以算是需求程度最为广泛的配置项了。但是呢&#xff0c;单单止步于配置可能还不够。如果我们自己有时候想要 diy 一个需求&#xff0c;但是 webpack 又没有相关的 loader 和 plugin 。那这个时候我们可能就得开始造点轮…...

STM32CubeMX按键模块化 点灯

本文代码使用 HAL 库。 文章目录前言一、按键原理图二、CubeMX 创建工程三、代码讲解&#xff1a;1. GPIO的输入HAL库函数&#xff1a;2. 消抖&#xff1a;3. 详细代码四&#xff0c;实验现象&#xff1a;总结前言 我们继续讲解 stm32 f103&#xff0c;这篇文章将详细 为大家讲…...

C#专栏目录(长期更新)

文章目录C# 基础C#进阶C#应用WPF基础WPF 3D小游戏C# 基础 1996年&#xff0c;微软用年薪三百万美刀的价格从Borland挖来了大神海尔斯伯格&#xff0c;开始了J开发&#xff0c;用以对抗Java。但SUN公司认为此举违反了Java开发平台的中立性&#xff0c;对微软提出诉讼。C#正是在…...

BurpSuite配置抓取HTTPS数据包

简介 我们在渗透测试的过程中&#xff0c;经常会遇到HTTPS的网站&#xff0c;Burp默认是没有办法抓取HTTPS的包的&#xff0c;想要让Burp抓取Https的包也很好办&#xff0c;只需要浏览器安装相关的证书即可&#xff0c;接下来将配置过程做一个记录。 前置条件&#xff1a; 1.J…...

图片转base64格式返回给前端,前端如何展示?

图片以base64形式在页面上展示出来在这里要说到Data URI scheme&#xff0c;它可以直接将一些小的数据直接嵌入到网页中&#xff0c;不需要再引入。支持格式如下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该如何上手?

首先我觉得要放平心态&#xff0c;不用过多去纠结是不是专业出身这回事。 想学那就认真去学&#xff0c;我们最终目标是掌握Python这门技能。 非计算机专业同时零基础&#xff0c;想自学Python该如何上手&#xff1f;分享我自学Python的几点建议吧。 1、重视基础 Python是一…...

关于 vue3 模板引用

文章目录前言1.访问模板引用2.v-for中的模板引用3.组件上的ref前言 如果我们需要直接访问组件中的底层DOM元素&#xff0c;可使用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主题&#xff0c;但仅仅只需要一个并且它是要合适的。我们建立了数十个 WordPress 博客并安装了数百个主题。根据我们所有的经验&#xff0c;我们发现Newspaper是大多数用户的最佳WordPress博客主题。这个自适应、强大的主…...

C 学习笔记 —— 函数指针

函数指针 上面的第二个char (* f) (int);写法就是函数指针的声明&#xff1b; 首先&#xff0c;什么是函数指针&#xff1f;假设有一个指向 int类型变量的指针&#xff0c;该指针储存着这个int类型变量储存在内存位置的地址。 同样&#xff0c;函数也有地址&#xff0c;因为函…...

FastDDS-3. DDS层

3. DDS层 eProsima Fast DDS公开了两个不同的API&#xff0c;以在不同级别与通信服务交互。主要API是数据分发服务&#xff08;DDS&#xff09;数据中心发布订阅&#xff08;DCPS&#xff09;平台独立模型&#xff08;PIM&#xff09;API&#xff0c;简称DDS DCPS PIM&#xf…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...