java反射常用方法

反射思维导图

请添加图片描述

使用案例

package Reflection.Work.WorkTest01;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;public class WorkDemo01 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {Class<?> aClass = Class.forName("Reflection.Work.WorkTest01.Student");Constructor<?> constructor = aClass.getConstructor(String.class);Constructor<?> constructor1 = aClass.getConstructor();System.out.println(constructor);System.out.println(constructor1);constructor.newInstance("888");constructor1.newInstance();Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(Integer.class);System.out.println(declaredConstructor);declaredConstructor.setAccessible(true);Object o = declaredConstructor.newInstance(9898);declaredConstructor.setAccessible(false);System.out.println("---------------------Method--------");Method[] methods = aClass.getMethods();System.out.println(Arrays.toString(methods));//包括继承的Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors();System.out.println(Arrays.toString(declaredConstructors));Method speak = aClass.getMethod("speak", String.class);System.out.println(speak);Student student = (Student) aClass.newInstance();Object kkk = speak.invoke(student, "kkk");System.out.println(kkk);Field[] declaredFields = aClass.getDeclaredFields();System.out.println(Arrays.toString(declaredFields));}
}
package Reflection.Work.WorkTest01;public class Student {private String name;private Integer age;public Integer id;public String sex;public Student() {System.out.println("无参");}public String speak(String s){System.out.println(s);return s;}private String speak1(String s){System.out.println(s);return s;}private Student(Integer age){System.out.println(age);}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;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Student(String name) {this.name = name;System.out.println(name);System.out.println("有参");}public Student(String name, Integer age, Integer id, String sex) {this.name = name;this.age = age;this.id = id;this.sex = sex;System.out.println("有参");}
}

上面代码使用Java的反射机制来获取和操作类的信息。具体是:

  Class.forName("Reflection.Work.WorkTest01.Student"):通过类的全限定名获取对应的Class对象。这里获取了名为"Reflection.Work.WorkTest01.Student"的类的Class对象。aClass.getConstructor(String.class)和aClass.getConstructor():通过Class对象获取类的构造方法。getConstructor(String.class)获取了带有一个String参数的构造方法,getConstructor()获取了无参构造方法。constructor.newInstance("888")和constructor1.newInstance():通过构造方法的实例对象来创建类的实例。newInstance("888")使用带有一个String参数的构造方法创建实例,newInstance()使用无参构造方法创建实例。aClass.getDeclaredConstructor(Integer.class)和declaredConstructor.newInstance(9898):通过Class对象获取类的私有构造方法,并通过私有构造方法创建实例。getDeclaredConstructor(Integer.class)获取了带有一个Integer参数的私有构造方法,newInstance(9898)使用私有构造方法创建实例。aClass.getMethods()和aClass.getDeclaredConstructors():通过Class对象获取类的方法和构造方法。getMethods()获取类的所有公共方法(包括继承的方法),getDeclaredConstructors()获取类的所有构造方法(包括私有构造方法)。aClass.getMethod("speak", String.class):通过Class对象获取类的指定方法。getMethod("speak", String.class)获取了名为"speak"、带有一个String参数的公共方法。speak.invoke(student, "kkk"):通过方法的实例对象来调用方法。invoke(student, "kkk")调用了类的方法"speak",并传入了一个String参数。aClass.getDeclaredFields():通过Class对象获取类的所有字段(包括私有字段)。

上面代码使用反射机制动态获取了类的构造方法、方法和字段,并通过反射调用了类的构造方法和方法。通过反射,可以在运行时动态地获取和操作类的信息,提供了更大的灵活性和扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/440087.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于数字签名技术的挑战/响应式认证方式

挑战/响应式认证方式简便灵活&#xff0c;实现起来也比较容易。当网络需要验证用户身份时&#xff0c;客户端向服务器提出登录请求&#xff1b;当服务器接收到客户端的验证请求时&#xff0c;服务器端向客户端发送一个随机数&#xff0c;这就是这种认证方式的“冲击&#xff08…

java学习之路(2)-编译java文件运行Java文件

创建.java后缀文本文件HelloWorld .java 写入代码&#xff1a; public class HelloWorld { public static void main(String []args) { System.out.println("Hello World"); } } 运行cmd命令 找到代码所在目录 输入javac编译Java文件生成HelloWorld.class 编译:…

Spring Security简介

什么是Spring Security Spring Security是 Spring提供的安全认证服务的框架。 使用Spring Security可以帮助我 们来简化认证和授权的过程。 官网&#xff1a;Spring Security 对应的maven坐标&#xff1a; <!--security启动器--> <dependency><groupId>or…

服装产业转型升级,iPayLinks帮助企业拓展市场盈更多

从十万件的大订单转变为几百件的小订单&#xff0c;小单快反模式为中国服装出口带来了机遇&#xff0c;也带来了挑战。   “十三行-中大-鹭江”是广州曾经最具代表性的外贸服装产业带。在过去很长的一段时间里&#xff0c;服装外贸老板在这里创造“神话”&#xff1a;24小时内…

C# IP v4转地址·地名 高德

需求: IPv4地址转地址 如&#xff1a;输入14.197.150.014&#xff0c;输出河北省石家庄市 SDK: 目前使用SDK为高德地图WebAPI 高德地图开放平台https://lbs.amap.com/ 可个人开发者使用&#xff0c;不过有配额限制。 WebAPI 免费配额调整公告https://lbs.amap.com/news/…

第一节 分布式架构设计理论与Zookeeper环境搭建

目录 1. 分布式架构设计理论 1. 分布式架构介绍 1.1 什么是分布式 1.2 分布式与集群的区别 1.3 分布式系统特性 1.4 分布式系统面临的问题 2. 分布式理论 2.1 数据一致性 2.1.1 什么是分布式数据一致性 2.1.2 副本一致性 2.1.3 一致性分类 2.2 CAP定理 2.2.1 CAP定…

ros2配合yolov8具体实现

效果图 用yolov8实时检测物体,包括物体的类别,置信度和坐标通过ros2发布出去自定义消息 int64 xmin int64 ymin int64 xmax int64 ymax float32 conf string name发布端代码 from ultralytics import YOLO import cv2 import rclpy from yolo_interfaces.msg import Msgyo…

C++入门(一)— 使用VScode开发简介

文章目录 C 介绍C 擅长领域C 程序是如何开发编译器、链接器和库编译预处理编译阶段汇编阶段链接阶段 安装集成开发环境 &#xff08;IDE&#xff09;配置编译器&#xff1a;构建配置配置编译器&#xff1a;编译器扩展配置编译器&#xff1a;警告和错误级别配置编译器&#xff1…

基于Vue uniapp和java SpringBoot的汽车充电桩微信小程序

摘要&#xff1a; 随着新能源汽车市场的迅猛发展&#xff0c;汽车充电桩的需求日益增长。为了满足市场需求&#xff0c;本课题开发了一款基于Java SpringBoot后端框架和Vue uniapp前端框架的汽车充电桩微信小程序。该小程序旨在为用户提供一个简洁高效的充电服务平台&#xff0…

Pytest中doctests的测试方法应用!

在 Python 的测试生态中&#xff0c;Pytest 提供了多种灵活且强大的测试工具。其中&#xff0c;doctests 是一种独特而直观的测试方法&#xff0c;通过直接从文档注释中提取和执行测试用例&#xff0c;确保代码示例的正确性。本文将深入介绍 Pytest 中 doctests 的测试方法&…

如何使用Python+Flask搭建本地Web站点并结合内网穿透公网访问?

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架&#xff0c;让我们可以使用Python语言快速实现一个网站或Web服务&#xff0c;本期教程…

云计算底层技术奥秘、磁盘技术揭秘、虚拟化管理、公有云概述

云计算基础 实验图例 虚拟化平台安装 创建虚拟机 1、创建虚拟机 2cpu&#xff0c;4G内存&#xff08;默认用户名: root 密码: a&#xff09; 2、验证 ecs 是否支持虚拟化 [rootecs ~]# grep -Po "vmx|svm" /proc/cpuinfovmx... ...[rootecs ~]# lsmod |grep kvm…