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

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...