当前位置: 首页 > 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…...

数据库课程设计案例:基于深度感知的智能仓储管理系统

数据库课程设计案例&#xff1a;基于深度感知的智能仓储管理系统 每次路过大型物流仓库&#xff0c;看到那些高耸的货架和穿梭的叉车&#xff0c;我总会想&#xff0c;他们是怎么知道哪个货位是满的&#xff0c;哪个是空的&#xff1f;靠人工盘点&#xff1f;那得累死。靠传统…...

vLLM-v0.17.1实战案例:为AI编程助手提供毫秒级代码补全服务

vLLM-v0.17.1实战案例&#xff1a;为AI编程助手提供毫秒级代码补全服务 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;其核心目标是提供极致的推理速度和易用性。这个项目最初由加州大学伯克利分校的天空计算实验室开发&#xff0c;…...

经典位运算和计算各进制下的各位数字之和

(num & (num - 1)) 是检测2的幂的经典位运算方法&#xff0c;结果为0即为2的幂 if ((num & (num - 1)) ! 0) 按位与&#xff1a; 0 & 0 0 0 & 1 0 1 & 0 0 1 & 1 1 全 1 才 1&#xff0c;有 0 则 0 int lowbit(int x) { …...

做客户管理之前,先看看这 6 个教训

方案 A&#xff1a;传统开发方式分析 传统开发需要组建专业团队&#xff0c;包括产品经理、UI 设计师、前后端开发、测试工程师等。中等规模项目团队 5-8 人&#xff0c;开发周期 3-6 个月&#xff0c;人力成本 30-100 万。开发过程中需求沟通成本高&#xff0c;业务人员用自然…...

石家庄整家定制口碑供应商

在石家庄&#xff0c;寻找一家值得信赖的整家定制服务商&#xff0c;是许多家庭在装修时的重要考量。一个优秀的定制品牌&#xff0c;不仅能为居者提供个性化的空间解决方案&#xff0c;更能将美学、功能与品质融为一体&#xff0c;让日常居住成为一种享受。关于我们位于石家庄…...

全球碳块市场调查:年复合增长率(CAGR)稳定保持在3.4%(2026 - 2032)

市场规模&#xff1a;稳健增长&#xff0c;潜力巨大QYResearch调研数据显示&#xff0c;2025年全球碳块市场规模预计约为17.75亿美元&#xff0c;而到2032年&#xff0c;这一数字将跃升至22.36亿美元。在2026 - 2032年期间&#xff0c;年复合增长率&#xff08;CAGR&#xff09…...

跨境云手机适用于哪些场景

跨境云手机适用于多种场景&#xff0c;能为不同用户群体带来便利与价值&#xff0c;对于跨境电商从业者而言&#xff0c;可用于多账号管理与运营&#xff0c;通过在云端虚拟出不同地区、不同配置的手机环境&#xff0c;实现多个店铺账号的同时登录和独立操作&#xff0c;有效规…...

【经验贴】运营岗考过CDA数据分析师一级经验分享

终于把CDA一级拿下了&#xff01;查成绩那一刻真的挺开心的&#xff0c;不是多难&#xff0c;但全程自己一点点学出来&#xff0c;特别有成就感。今天就把我整个备考过程老老实实写出来&#xff0c;给正在准备的小伙伴一个参考。一、备考原因我最开始考CDA&#xff0c;完全是因…...

FaceFusion项目二次开发踩坑记:深入content_analyser.py,手动修复模型依赖哈希问题

FaceFusion项目二次开发踩坑记&#xff1a;深入content_analyser.py&#xff0c;手动修复模型依赖哈希问题 当你在全新环境中部署经过二次开发的FaceFusion项目时&#xff0c;可能会遇到一个令人头疼的问题——模型文件哈希校验失败。这个问题通常表现为控制台输出类似[FACEFUS…...

保姆级避坑指南:手把手教你搞定CARLA 0.9.11与Autoware的ROS话题转发(附完整代码)

深度解析CARLA与Autoware联合仿真中的ROS话题转发实战 在自动驾驶仿真开发领域&#xff0c;CARLA与Autoware的联合使用已成为研究热点。许多开发者在尝试将两者结合时&#xff0c;往往会在ROS话题转发环节遇到各种"坑"。本文将聚焦这一关键环节&#xff0c;提供一份详…...