【Java学习】反射

目录

反射类

一、泛型参数

二、反射类类型

三、实例化

1.实例化材料

2.结构信息可使用化

四、使用

1.Class —类完整结构信息

1.1Class<类>实例化

1.2Class<类>实例获取

1.2.1Class类静态获取:

1.2.2信息类静态获取

1.2.3信息类非静态获取

1.3信息类实例化

1.4分配导信息

2.Constructor —类构造器结构信息

1.4.1Constructor<类>实例获取

2.1信息类的实例化

3.Field—类成员变量结构信息

1.4.2Field实例获取

3.1修改

4.Method——类成员方法结构信息

1.4.3Method实例获取

4.1调用

5.私有信息的获取与使用(说明)

1.Declared获取

2.setAccessible设置


反射类

反射类是 类结构信息 反射获取并使用 泛型类

一、泛型参数

泛型类 将类里面的 类类型 作为参数类结构实现时 传具体的类类型,让泛型类里面的 类类型参数 模套地给上 对应具体有意义的类型,实现 类在结构上 用类类型实现的 泛型化

  • <>里传入 要反射获取结构信息的类,它的确定 使反射类的类型结构 确定下来

二、反射类类型

反射类类型 会对应不同的泛型类 不同的类结构,对应会反射出 类不同模块的 结构信息


三、实例化

1.实例化材料

反射类实例化需要 类的类型信息(这里是需要获取结构信息的 传的参数类 的类型,而反射类类型不需要,因为它是一直都提供 已知的)与类对应模块的结构信息


2.结构信息可使用化

反射类 对身上带的 导入模块结构信息已知类类型的 类 反射获取创建 对应的独立出来可使用的 类模块结构信息 存储放入 此对应类的 结构模块的反射类的 实例对象中有了实例对象,才可实现 对已获取到的类结构信息 进行使用


四、使用

1.Class<T>—类完整结构信息

1.1Class<类>实例化

每一个类运行时,在JVM上都获取有 类的完整结构信息,配合已知的 类的类型信息反射类Class<类>都会在JVM有且只有一个地 创建出 Class<类>的 存储有可使用类完整结构信息实例对象


1.2Class<类>实例获取
1.2.1Class类静态获取

Class.forName("类的全路径");

—> return Class<类>

调用反射类Class(未传入类类型的 最初始反射类Class<T>)里的静态方法 根据类的路径找到该类 得到它的类类型,再结合JVM上获取的该类结构信息 创建Class<类>反射类 的实例化对象

1.2.2信息类静态获取

类变量.class;

—> return Class<类>

调用此信息类里面的静态方法 获取该类对应的 Class<类>反射类的实例对象 

1.2.3信息类非静态获取

类实例对象.getClass();

—> return Class<类>

调用此信息类里面的非静态方法 获取该类对应的 Class<类>反射类的实例对象


1.3信息类实例化

class<类>.newInstance();

—> return 类的实例对象

有了Class<类>反射类的 实例对象,就可以使用 它身上带有的完整类结构的信息,就可以用它 创建信息类的实例对象


1.4分配导信息

有了Class<类>反射类的 实例对象,就可以分配 其它模块结构的信息 导给其它结构模块的反射类 就可以创建出 其它模块结构的 反射类实例对象进行对类其它结构信息的 使用与操作


2.Constructor<T>—类构造器结构信息

1.4.1Constructor<类>实例获取

class<类>.getDeclaredConstructor(形参类型字段);

—> return  Constructor<类>

反射类Class<类>实例对象 用它里面已有的 类的指定构造器的 模块结构信息导入 对应类类型的 反射类Constructor<类>中,Constructor<类>创建出 可使用操作里面存的 该类的 指定构造器结构信息的 实例化对象

2.1信息类的实例化

constructor<类>.newInstance(形参);

—> return 类的实例对象

反射类Constructor<类> 对应该类类型获取到 对应该类的 指定构造器模块结构信息创建出的实例对象constructor<类>,它使用里面 此类的构造器结构信息 进行实例化此类的实例对象


3.Field—类成员变量结构信息

1.4.2Field实例获取

class<类>.getDeclaredField("成员名");

—> return Field

反射类Class<类>的实例对象 用它里面已有的 类的指定成员变量的 模块结构信息导入 对应类类型的 反射类Field中,Field创建出 可使用操作里面存的 该类的 指定成员变量结构信息的 实例化对象

3.1修改

field.set(类的实例对象,成员变量参数);

—> return void

反射类Field 对应该类类型获取到 对应类的 指定成员变量模块结构信息创建出的实例对象field,它使用里面 该类的该成员变量的结构信息 对该类的实例对象的该成员变量 进行赋值修改


4.Method——类成员方法结构信息

1.4.3Method实例获取

class<类>.getDeclaredMethod("方法名",形参类型字段);

—> return Method

反射类Class<类>的实例对象 用它里面已有的 类的指定方法的 模块结构信息导入 对应类类型的 反射类Method中,Method创建出 可使用操作里面存的 该类的指定方法结构信息的 实例化对象

4.1调用

method.invoke(类的实例对象,方法参数);

—> return void

反射类Method 对应该类类型获取到 对应该类的 指定方法模块结构信息创建出的实例对象method,它使用里面 该类的该方法的结构信息 对该类的实例对象 进行方法的调用


5.私有信息的获取与使用(说明)

1.Declared获取

class<类>.getDeclared**(**);

—> return 局部模块结构的反射类实例

Class<类>实例 在私有模块结构信息类 的类外 将它里面存的 此模块结构信息 共有地全部导入 对应类的模块反射类上 来创建 模块反射类实例

2.setAccessible设置

局部模块结构的反射类实例.setAccessible(true);

—> return void

将此反射类实例 获得到的类模块结构信息 全部设置成共有化,之后就可 在私有模块结构信息类 的类外 全部公有化地使用它们了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MVC、MVP、MVVM三大架构区别

1、MVC架构 M&#xff08;Model&#xff09;&#xff1a;主要处理数据的存储、获取、解析。 V&#xff08;View&#xff09;&#xff1a;即Fragement、Activity、View等XML文件 C&#xff08;Controller&#xff09;&#xff1a;主要功能为控制View层数据的显示&#xff0c;…

科创大赛——知识点复习【c++】——第一篇

目录 输入 一、cin 二、scanf 三、gets 四、getchar 五、fgets 输出 一、cout 二、printf 基本数据类型 一&#xff0c;数据类型有哪些&#xff1f; 二&#xff0c;整型&#xff08;Integer Types&#xff09; 1&#xff0c;修饰符 2&#xff0c;整型数据的数据范…

java学习之数据结构:四、树(代码补充)

这部分主要是用代码实现有序二叉树、树遍历、删除节点 目录 1.构建有序二叉树 1.1原理 1.2插入实现 2.广度优先遍历--队列实现 3.深度优先遍历--递归实现 3.1先序遍历 3.2中序遍历 3.3后序遍历 4.删除 4.1删除叶子节点 4.2删除有一棵子树的节点 4.3删除有两棵子树的节…

基于 HTML 和 CSS 实现的 3D 翻转卡片效果

一、引言 在网页设计中&#xff0c;为了增加用户的交互体验和视觉吸引力&#xff0c;常常会运用一些独特的效果。本文将详细介绍一个基于 HTML 和 CSS 实现的 3D 翻转卡片效果&#xff0c;通过对代码的剖析&#xff0c;让你了解如何创建一个具有立体感的卡片&#xff0c;在鼠标…

PHP数组排序深度解析:sort()、rsort()、asort()、arsort()、ksort()、krsort() 的适用场景与性能对比

在PHP开发中&#xff0c;数组排序是日常操作的核心技能之一。无论是处理用户数据、产品列表&#xff0c;还是分析日志信息&#xff0c;合理的排序方法能显著提升代码的效率和可维护性。PHP提供了多种数组排序函数&#xff08;如 sort()、rsort()、asort() 等&#xff09;&#…

C++ 中二级指针的正确释放方法

C 中二级指针的正确释放 一、什么是二级指针&#xff1f; 简单说&#xff0c;二级指针就是指向指针的指针。 即&#xff1a; int** p;它可以指向一个 int*&#xff0c;而 int* 又指向一个 int 类型的变量。 常见应用场景 动态二维数组&#xff08;例如 int** matrix&#x…

Linux 进程基础(二):操作系统

目录 一、什么是操作系统&#xff1a;用户和电脑之间的「翻译官」&#x1f310; OS 的层状结构&#x1f9e9; 案例解析&#xff1a;双击鼠标的「跨层之旅」 二、操作系统的必要性探究&#xff1a;缺乏操作系统的环境面临的挑战剖析&#x1f511; OS 的「管理者」属性&#xff1…

SpringMVC详解

一&#xff1a;Maven 1.1 概述 &#xff08;1&#xff09;项目结构 所有IDE使用Maven创建的项目结构完全一样&#xff0c;maven项目可通用 &#xff08;2&#xff09;构建流程&#xff08;编译、测试、打包、发布&#xff09; &#xff08;3&#xff09;依赖管理 定义&#xff…

深入解析Linux进程间通信(IPC):机制、应用与最佳实践

引言 在多任务操作系统中&#xff0c;进程间通信&#xff08;Inter-Process Communication, IPC&#xff09;是协同工作的核心机制。Linux作为现代操作系统的典范&#xff0c;提供了8种主要IPC方式&#xff0c;从传统的管道到面向网络的套接字&#xff0c;每种方法都暗藏独特的…

linux 使用nginx部署ssl证书,将http升级为https

前言 本文基于&#xff1a;操作系统 CentOS Stream 8 使用工具&#xff1a;Xshell8、Xftp8 服务器基础环境&#xff1a; nginx - 请查看 linux 使用nginx部署vue、react项目 所需服务器基础环境&#xff0c;请根据提示进行下载、安装。 1.下载证书 以腾讯云为例&#xff…

深入了解Linux系统—— 环境变量

命令行参数 我们知道&#xff0c;我们使用的指令它本质上也是一个程序&#xff0c;我们要执行这个指令&#xff0c;输入指令名然后回车即可执行&#xff1b;但是对于指令带选项&#xff0c;又是如何实现的呢&#xff1f; 问题&#xff1a;main函数有没有参数&#xff1f; 在我…

Oracle OCP认证考试考点详解083系列07

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 31. 第31题&#xff1a; 题目 解析及答案&#xff1a; 从 Oracle 19c 开始&#xff0c;数据库配置助手&#xff08;DBCA&#xff09;在克…