Java——反射详解

news2025/1/16 2:58:19

目录

一、概念

二、功能

三、反射相关的重要的类

3.1 class类

3.2 获取class类的方法

3.3 class类中的方法

3.4 Field类方法

 3.5 打破封装

一、概念

反射库(reflection library)提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序。这项功能被大量地应用于JavaBeans中,它是Java组件的体系结构。使用反射,Java可以支持Visual Basic用户习惯使用的工具。特别是在设计或运行中添加新类时,能够快速地应用开发工具动态地查询新添加类的能力。能够分析类能力的程序称为反射(reflective)。

二、功能

反射机制的功能极其强大,在下面可以看到,反射机制可以用来:

● 在运行时分析类的能力。

● 在运行时查看对象,例如,编写一个toString方法供所有类使用。

● 实现通用的数组操作代码。

● 利用Method对象,这个对象很像C++中的函数指针。

注意:反射是一种功能强大且复杂的机制。使用它的主要人员是工具构造者,而不是应用程序员。

三、反射相关的重要的类

 注意:必须先获得Class才能获取Method、Constructor、Field

3.1 class类

在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行。然而,可以通过专门的Java类访问这些信息。保存这些信息的类被称为Class。

3.2 获取class类的方法

Object类中的getClass( )方法将会返回一个Class类型的实例。

调用静态方法forName获得类名对应的Class对象

注意:如果类名保存在字符串中,并可在运行中改变,就可以使用这个方法。当然,这个方法只有在className是类名或接口名时才能够执行。否则,forName方法将抛出一个checked exception(已检查异常)。无论何时使用这个方法,都应该提供一个异常处理器(exception handler)。

获得Class类对象的第三种方法非常简单。如果T是任意的Java类型(或void关键字), T.class将代表匹配的类对象。

注:以上三种方式返回值都是Class类型。

3.3 class类中的方法

通过反射实例化对象
对象.newInstance()
注:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参构造存在才可以。
否则会抛出java.lang.InstantiationException异常。

3.4 Field类方法

 3.5 打破封装

set()可以访问私有属性时,需要打破封装,才可以访问

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

口腔医院管理系统 | 口腔医院小程序 | 数字化门店转型

人们生活质量提升,在饮食方面不仅吃的饱,而且吃的好,相应的口腔问题就随之增多了,市面上的口腔医院不少,就诊的患者也不少。 目前,随着消费升级/互联网信息便捷化的大场景下,无论口腔门店经营还…

【Python项目】圣诞节快到了,Python基于海龟(turtle)实现的圣诞树效果,是好几个哟 | 附源码

前言 halo,包子们上午好 圣诞节快到了 今天我的好兄弟们安排了一波圣诞节的Python代码 主要是用海龟(turtle)画图实现的,非常简单的啦 话不多说,直接开整 相关文件 关注小编,私信小编领取哟!…

推动教育信息化2.0变革!重建5平方公里的实景三维校园....

当前,各地市智慧校园建设方兴未艾,随着《教育信息化“十四五”规划》的发布实施,明确指出要以人工智能、大数据、物联网、云计算等新兴技术为依托,推动教育信息化2.0变革,打造全新的教育生态模式,让校园变得…

Nacos配置管理

Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.在nacos中添加配置文件 然后在弹出的表单中&#xff0c;填写配置信息&#xff1a; 1.2.从微服务拉取配置 1&#xff09;引入nacos-config依赖 <!--nacos配置管理依赖--> <dependency><gr…

简化基于Maven的Scala项目创建详解

使用 Maven 来构建 Scala 项目方便虽然方便&#xff0c;但依赖于每一个开发人员都去配置一遍项目的必要依赖&#xff0c;包括 Scala 插件的编译配置以及 Scala 的依赖类库&#xff0c;让每个人通过拷贝&#xff08;Copy&#xff09;之前的项目配置当然可以&#xff0c;但难免会…

二叉树与递归

前言 二叉树与递归 文章目录前言一、第一种方法1、如何思考二叉树相关的问题&#xff1f;1&#xff09;最大深度的定义2&#xff09;由具体到一般3&#xff09;公式4&#xff09;总结2、为什么需要使用递归&#xff1f;1&#xff09;循环和递归2&#xff09;递和归的过程3、为什…

GitHub上传文件和文件夹以及大于25M的单个文件

有好几个地方直接拖拽上传即可&#xff08;其中之一见下图&#xff09;&#xff0c;不管是文件还是文件夹目录结构不会变的。一次可上传的文件夹要求其内部的文件个数不超过100个&#xff0c;否则先GitHub上新建文件夹&#xff08;空文件的嘎货&#xff09;然后文件分批上传到G…

使用Python谋生的10种方法

这里本文的目录前言在质量保证部&#xff08;QA&#xff09;工作成为小型组织的IT员工为应用程序执行专业脚本管理网络教编程技能帮助人们决定位置执行数据挖掘与嵌入式系统互动开展科学任务进行数据实时分析零基础Python学习资源介绍&#x1f449;Python学习路线汇总&#x1f…

小程序ScrollView置顶只会成功一次,小程序如何做一键置顶?

现在会出现的问题就是点击置顶只会成功触发一次触顶 问题录像 置顶出现的问题为什么会出现这个问题呢&#xff1f; 先看看怎么控制scrollView实现置顶的。 scroll-top number/string 否 设置竖向滚动条位置scroll-view官网地址 通过动态的设置scroll-top来控制滚动条的位置…

Python编码问题整理

GB2312是中国规定的汉字编码&#xff0c;也可以说是简体中文的字符集编码 GBK 是 GB2312的扩展 ,除了兼容GB2312外&#xff0c;它还能显示繁体中文&#xff0c;还有日文的假名 cp936&#xff1a;中文本地系统是Windows中的cmd&#xff0c;默认codepage是CP936&#xff0c;cp936…

three.js之光源

文章目录简介分类环境光点光源平行光聚光灯光源辅助对象相关计算颜色计算阴影相关属性castShadowreceiveShadowshadowLightShadow基类专栏目录请点击 简介 光源是对于自然界光照的模拟&#xff0c;往往为了更好的渲染场景&#xff0c;需要设置不同的光源&#xff0c;设置不同的…

如何利用Python中的scipy做卡方检验?

1.简单介绍 卡方检验是一种用途很广的计数资料的假设检验方法。它属于非参数检验的范畴&#xff0c;主要是比较两个及两个以上样本率&#xff08;构成比&#xff09;以及两个分类变量的关联性分析。其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题。 应用场…

【数据架构】如何通俗易懂的介绍数据模型

一直以来&#xff0c;如何和业务领导讲明白什么是数据模型&#xff0c;是沟通的一大难题&#xff0c;下面演示一个示例&#xff0c;仅供参考。 介绍抽象世界 先从大佬胡本立的《以人为中心的数据观》说起。这个世界可以划分为3个世界&#xff0c;一个是客观存在的客观世界&am…

Lecture3:神经网络与反向传播

目录 1.计算图 2.反向传播与计算图 2.1 第一个例子 2.2 第二个例子--sigmoid 2.3 第三个例子--MAX门 2.4 第四和例子--对于向量的梯度 3.神经网络 4.常见矩阵求导公式 4.1 标量对向量求导 4.2 二次型对向量求导 1.计算图 在实践中我们想要推导和使用解析梯度&…

SOLIDWORKS PDM 2023新功能 SOLIDWORKS本地数据管理优化升级

SOLIDWORKS 2023新版本已经与大家见面&#xff0c;今天众联亿诚与大家分享SOLIDWORKS PDM 2023新功能&#xff0c;让我们先一起来看看视频—— 点击观看SOLIDWORKS PDM 2023新功能 长期以来&#xff0c;SOLIDWORKS PDM Professional一直为SOLIDWORKS的本地数据管理制定标准。随…

centos8 离线安装redis的艰苦历程(gcc、make、redis)

目录 背景环境 一、安装gcc 二、安装make 三、安装redis 背景环境 服务器centos8&#xff0c;内网不能联网 本机Windows&#xff0c;能联网 一、安装gcc 1、下载rpm文件 比较恶心的是需要手动的搜索一个一个的下载。不要问我为什么知道的&#xff01;&#xff01;&…

C++11特性-模板的改进

1.模板的右尖括号>> C11模板的多个右尖括号需要一个空格符fun<A<> >,之前连在一起是右移操作符 C11特性优化了这个fun<A<>> 2.模板的默认参数 函数模板能添加模板参数 template <typename T int> 类模板参数多个时&#xff0c;必…

opencv c++ 光流法、稀疏光流法、稠密光流法、均值迁移追踪(meanshift、camshift)

1、概念 参考&#xff1a; (70条消息) 什么是光流法_张年糕慢慢走的博客-CSDN博客_光流法 (70条消息) 计算机视觉--光流法(optical flow)简介_T-Jhon的博客-CSDN博客_光流法 此外&#xff0c;还有基于均值迁移的目标追踪方法&#xff1a; camshift&#xff1a; (75条消息)…

【VC7升级VC8】将vCenter Server 7.X 升级为 vCenter Server 8 (上)—— VC 8系统要求与升级前的说明

目录1. 新 vCenter Server Appliance 8的系统要求1.1 确认升级路径1.2 硬件要求1.3 存储要求1.4 软件要求1.5 vSphere Client 软件要求2. 升级说明2.1 升级阶段介绍2.2 旧VC7虚拟机的信息2.3 打开升级用安装程序&#xff08;1&#xff09;进入vcsa镜像目录&#xff08;2&#x…

leetcode(力扣)算法刷题-160. 相交链表

描述&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据保证整个链式结构中不存在环。 注意&#xff0c…