对Java中反射的理解

JAVA中的反射,什么是反射,怎么理解反射(保姆级、代码、图文讲解) 反射、java 阅读详情

反射:字面意思就是反向映射。通常我们都是通过类来获取对象,而反射则正好相反,它是通过对象来获取到对象所属的类。并且可以获取到类的完整结构(包括private修饰的信息)。

反射的重要性:反射使我们不需要在编译时知道类型,而可以延迟到运行时获得对象的属性、调用对象的方法。使得 Java 语言具有了动态性。 Hibernate、Spring 等框架都是基于反射实现的,可以说没有反射就没有 JavaEE。

1、是什么(What)?

在编译时不知道哪个类被加载,在运行时可以动态获取对类的属性以及调用对象的方法的机制就叫反射。

2、为什么(Why)?

简单的说,反射使得 Java 这种静态编译型语言具有了动态性。

Java 反射机制主要提供了以下功能:

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时获取泛型信息
  • 在运行时调用任意一个对象的成员变量和方法
  • 在运行时处理注解
  • 生成动态代理

就是说,反射有能够看透 class 的能力,类的信息都是透明的(包括 private 修饰的属性或方法也可以访问)。也就是能够获取到 Class 中所有的信息。

3、怎么用(How)?

反射相关的核心类

java.lang.Class:代表一个类
java.lang.reflect.Constructor:代表类的构造器
java.lang.reflect.Method:代表一个方法
java.lang.reflect.Field:代表类的成员变量

(1)Class 类:整个反射的核心类(源头)。

       Class 是描述类的类的类型。例如:Person 类是每一个具体 person 对象实例的类的类型。ArrayList类是每一个ArrayList对象实例的类的类型。在 Java 中“万物皆对象”,所以 Person 类和 ArrayList 类也可以看做是一个对象,Class 就是他们类的类型(也是 Class 类本身类的类型,Class 类也可以看成是一个具体的对象)。

Class类理解

 

获得Class类的实例(四种方式)

(1)通过类的属性获取:类名.class
  Class clazz = String.class;
(2)通过调用类实例的 getClass() 方法:对象.getClass()
  String str = "hello";
  Class clazz = str.getClass();
(3)通过Class类的静态方法 forName() 获取:Class.forName("类名路径") (常用方式)
  Class clazz = Class.forName("java.lang.String");
(4)通过类加载器加载(不常用)
  ClassLoader cl = this.getClass().getClassLoader();
  Class clazz = cl.loadClass("类的全类名");

 

有了Classs实例就通过API可以获取到运行时类的完整结构。

(2)Constructor 类:

Constructor<T> getConstructor(Class<?>... parameterTypes)

 获取指定参数的public构造函数

Constructor<?>[]  getConstructors()

 获取所有public的构造函数

Constructor<T>   getDeclaredConstructor(<?>... parameterTypes)

 获取指定参数的所有构造函数

Constructor<?>[]  getDeclaredConstructors()

 获取所有构造函数

(3)Method类:

Method[]  getMethods()

返回当前类和父类所有的public的方法

Method getMethod(String name, Class<?>... parameterTypes)

返回 当前类和父类指定的public的方法

Method[] getDeclaredMethods()

返回当前类所有的方法包含private

Method getDeclaredMethod(String name, Class<?>... parameterTypes)

返回当前类指定的方法(包含private)

(3)Field类:

Field getField(String name)

 ////获取当前类及父类指定名字public属性

Field[] getFields()

//获取当前类及父类所有public属性

Field getDeclaredField(String name)

 ////获取当前类指定名字的属性

Field[] getDeclaredFields()

//获取当前类所有的属性

几种方法的区别:

不加“s”返回的是指定参数的单个对象,加“s”的返回的是数组类型

不加“Declared”的返回的是当前类和父类中所有public修饰的对象,加“Declared”的返回的是当前类中所有的对象(包括private修饰的)

(4)其他的注解(Annotation)、泛型(Generic)等类似。这里不再赘述。

(5)使用反射的一般开发步骤:

       获取Class实例(四种方式)→ 通过Class实例获取Constructor( Field、Method等) → 通过Constructor( Field、Method等)调用相应的方法

总结:Java 中反射的重要性不言而喻,想要理解 Java 框架(如Spring)的源码,就必须学好反射,反射其实就是在运行时可以动态地获取任意一个类的所有属性、方法、注解等所有信息的完整结构, Java 所有框架都可以简单理解成是由 注解+反射+设计模式的一种结合。学习反射还需要了解类的加载机制。

 

 

UOS的ARM机编译QT5.14.2记录 我需要的qt版本是Qt5.14.2,所以选择编译Qt5.14.2源码;几个月前尝试了编译一次,当时编译过程中出现了报错,当时时间很紧最后安装的默认版本来使用,最近有时间重新进行了一次编译,历经3个星期(4G的内存)终于解决了各种坑,编译成功了,现在将编译过程中遇见的一些坑记录一下,方便日后能记得这一次可恶的编译过程,如有描述欠缺的地方,还希望各位大佬给点意见指导指导🙏。 阅读详情

相关推荐

数字电路基础(CMOS电路、低功耗方法)

文章目录一、CMOS器件1.1.CMOS反相器1.2. CMOS与非门1.3.CMOS或非门1.4 CMOS与门和CMOS或门二、CMOS电路参数——功耗 一、CMOS器件 1.1.CMOS反相器 CMOS反相器实现非门功能,由一个PMOS管和一个NMOS管组成,其逻辑电路图如下: 其真值表如下: In PMOS NMOS Out 0 √ 导通 ×关闭 1 1 ×关闭 √...

Mr.翟的博客 1万+

Java反射的基本理解

1.什么是反射? 我记得网上有个关于反射很通俗的解释: java是个大美女,但大美女有很多事情是规定不让你做的.反射就是把枪,有枪在手,你想让大美女做什么事就做什么事,脱光了都没问题. 正常的解释:Java的反射是指程序在运行期可以拿到一个对象的所有信息。是一种动态获取对象信息以及动态调用对象的方法。最常见的场景就是在动态代理。而动态代理应用最广的地方就是各种框架,比如:Spring。 2.反射的内容和应用 2.1 class对象 反射必定离不开 Class 对象。都知道,代码编写完后是要编译成

我的青春一去不复返 1769

技术文档的语言表达:简洁、准确与易懂的平衡艺术

技术文档的语言表达不仅要简洁、准确,还需要能够打破技术壁垒,使不同背景的读者都能理解。这是一项需要技巧和经验的工作,它要求技术作者既要具备扎实的专业知识,又要具备清晰的表达能力。通过不断打磨语言的简洁性、准确性和易懂性,我们能够创造出一份高质量的技术文档,让知识的传递不再受限于语言的障碍。

人心有反复,好在山水有重逢。 4677

JAVA反射机制、Class类及动态加载、成员变量构造方法其他方法的反射与调用、代理模式AOP

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。 而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。 反射就是把java类中的各种成分映射成一个个的Java对象。 面向切

实干、效率、武功、心法 391

嵌入式开发中Tab与空格混用的危害与统一规范实践

在软件工程中,代码格式一致性是保障可读性与团队协作效率的基础。从原理上看,制表符(Tab)与空格(Space)在存储与显示机制上存在本质差异:Tab是控制字符,其显示宽度取决于编辑器设置;空格则是固定宽度的字符。这种差异导致混用时会引发代码对齐错乱、版本控制冲突及跨平台兼容性问题,严重影响工程的可维护性。尤其在嵌入式开发领域,资源受限环境与高可靠性要求使得统一的编码规范更为关键。通过配置编辑器、集成clang-format等自动化工具,可以强制实现缩进风格的一致性,从而提升代码质量与团队协作效率。本文聚焦于

weixin_42545636的博客 276

5G时代必知:LDPC与Polar码实战解析(附MATLAB仿真代码)

本文深入解析5G时代核心信道编码技术LDPC码与Polar码的原理差异及性能表现,通过MATLAB仿真代码展示其在实际通信系统中的应用。LDPC码适用于大数据块高速传输,而Polar码在小数据块低时延场景表现优异,帮助开发者优化5G系统设计。

sugar的博客 642

java反射(特别通俗易懂)

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类...

qq_34207444的博客 829

ADS谐波平衡仿真自动优化报错?三步搞定HB控件设置(附常见错误排查)

本文针对ADS谐波平衡仿真在自动优化中常见的报错问题,提供了三步核心排查法。首先检查并禁用HB控件中可能导致冲突的小信号仿真模式,其次合理化仿真频率与扫描参数设置,最后审视优化变量与目标的定义。通过精准配置HB控件以适配自动优化流程,能有效解决大多数仿真失败问题,确保非线性电路设计顺利进行。

c2d3e4f的博客 787

简单谈谈对Java中反射的理解

1.什么是反射: Java的反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有方法和属性,对于任意一个对象,都可以调用这个对象的任意方法和属性。这种动态获取信息和动态调用对象的方法和属性的功能称之为Java的反射机制。 反射就是把Java类中各种成分映射成一个个对象。 2.反射 ...

ITJingYing2050的博客 467

STM32+Air724UG基于阿里云物联网平台的OTA远程升级实战指南

本文提供了一套基于STM32微控制器与Air724UG 4G Cat.1通信模组,通过阿里云物联网平台实现OTA远程升级的完整实战指南。文章详细阐述了BootLoader与用户程序的分工、云端配置、固件下载与烧写流程,并分享了关键代码实现与常见问题排查方法,帮助开发者快速为物联网设备部署稳定可靠的无线升级功能。

weixin_28285943的博客 514

电气:蒙特卡洛1000个风光场景并通过削减法|聚类法得到几个典型场景(matlab\python实现)

    个人电气目录传送门:学好电气全靠它,个人电气博文目录(持续更新中…)     本文内容包括22页(代码和一些自己对风光的观点) 提示:专栏解锁后,可以查看该专栏所有文章,划算。 文章目录一、理论依据1.风电DG出力概率模型1.2光伏DG出力概率模型1.3对风光的认识二、蒙特卡洛模拟1000个风光场景、并通过削减法得到5个典型风电场景 (Matlab 版程序)三、蒙特卡洛模拟1000个风光场景、并通过聚类法得到5个典型

总裁余(余登武)博客 7681

如何理解java反射_怎么理解java反射

怎么理解java反射?概述Java 反射是可以让我们在运行时获取类的方法、属性、父类、接口等类的内部信息的机制。也就是说,反射本质上是一个“反着来”的过程。我们通过new创建一个类的实例时,实际上是由Java虚拟机根据这个类的Class对象在运行时构建出来的,而反射是通过一个类的Class对象来获取它的定义信息,从而我们可以访问到它的属性、方法,知道这个类的父类、实现了哪些接口等信息。Class类...

weixin_39894914的博客 159

ADS基础教程19 - 电磁仿真(EM)基本概念和实操

一、引言二、基本概念1.EM介绍2.Momentum介绍3.FEM介绍4.Substrate介绍三、创建Layout并进行Momentum仿真1.创建Layout2.添加Microtrip(微带线)3.添加Substrate4.Momentum仿真四、总结EM全称Electromagnetic,即electro(电)magnetic(磁)。ADS为设计和评估现代通信系统产品提供了电磁仿真工具(EM)。EM包括Momentumsimulator(动量仿真器)和FEM。

XZ_ZC的博客 1万+

Java反射理解

在众多的博客中,java反射号称Java框架的灵魂;本文笔记记录,Java反射的理解与Java反射的一些应用。 理解Java反射中的Class对象 理解Java反射,首先理解java由字符串的代码变成一个执行程序的过程。 比如我写了一个 Person.java 字符串的代码文件,进行编译产生 Person.class java的字节码文件。 要想使用Person,需要产生一个对象。 如上图,通过类加载器ClassLoader,将Person.class文件加载到内存中。在加载到内存中会产生一个对应的Cla

Hello_Ray的博客 473

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JAVA反射理解

为什么使用反射: java反射,听起来很是高大上,但是反射就是高大上。初级java程序员在开发中一般不会用到反射,大部分人都是有需要了,创建一个对象,然后new一个对象,调用方法。但是如果一个类里面的一个属性没有get和set方法,你又想修改,或者一个类里面有个私有方法,你想调用,这个时候你不会反射,那你可能要绕很大一个圈子才能实现你的功能了。这时候就体现反射的重要性了,而且现在很多最常用的框架都...

DK_long_teng的博客 521

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java反射的理解_带你理解java反射机制是什么

也许程序员们听过这么一句话,就是没有反射也就没有框架,现有的框架都是以反射为基础,在实际项目的开发中,框架和类都是不可缺少的,反射是将框架和类结合在一起的粘合剂,所以想学好编程,学好反射机制是十分重要的。这篇文章来介绍java反射机制的相关基础知识,java零基础的新手朋友们可以来来学习下面的内容。什么是java反射机制?我们又为什么要学它?当程序运行时,允许改变程序结构或变量类型,这种语言称为动...

weixin_28725949的博客 365

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java中反射的理解及如何使用——精简

反射是Java学习中重要的一部分内容,反射是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

唯有努力,方可自信! 8162

java 反射之我的理解

Class tmp = testClass.getClass();        这是我输出的反射class tmp和 testclass的地址:tmp地址:  class day3.TestClass testClass地址: day3.TestClass@70dea4e 1、他们的实际存储的地址是不是一样的?如果地址是一样的,那么可以理解为,tmp在testClass的存储地上只是...

jieli4970的博客 243

java反射的理解_Java反射的理解

一、什么是反射反射是Java提供的动态获取对象和调用对象方法的功能。我们知道在Java中,获取对象的最常用的办法是通过关键字“new”,但这要我们事先将需要获取的对象写死在代码里,在代码运行期间无法改变。而Java的反射机制可以让我们动态获取对象,在代码运行期间才决定获取哪个对象。二、反射的作用Java引入反射机制,是为了提高程序的灵活性,减少代码之间的耦合度。比如我们要实例化一个Person类,...

weixin_32816563的博客 140

理解Java反射的正确姿势

理解Java反射的正确姿势

qq_41490913的博客 126

Java关于反射的加深理解

一、反射的基础 java程序中各个java类属于同一类事物,描述这类事物的java类名就是Class 比如说,很多人,用java来表示就用Person类,很多类,就用Class,Person类的实例对象比如张三、李四代表着一个个具体的人,而Class类就代表着各个类在内存中的字节码 一个类被类加载器加载进内存,会占用一片存储空间,这个空间的内容就是类的字节码,不同的类的字节码不同,所以他

NotPerfect-EOF 1747

Java 反射?反射深度理解

反射 初步探究

Seek_Mark_F_Me的博客 211

深入理解Java反射机制

到底什么是反射? 很多初学者总是很迷惑一个问题,反射到底是个啥?包括我刚开始学习java的时候,对于反射这个词很迷,那时候老师和我们讲,反射就是“照镜子”,巴巴拉拉一大堆,但还是听不懂。后来慢慢深入了解以后,才开始慢慢拨云见日。 以我的理解,反射就是从内存的层面去操作代码。首先只要能运行的一切代码,都肯定会出现在内存里,不然肯定运行不了,这是人人都懂的废话。知道了这个,然后我们再了解一下jav...

chengweimam的博客 336

理解java反射

官方说法:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 在回答面试官的时候适当结合自己的理解即可。 实现反射的步骤:   1.获取Class类   2.通过Class创建对象   3.获取类中的方法   4.获取类中的属性,属性值或类型 三种方式如...

、YongTing 160

从另一个角度理解Java中的反射

从另一个角度理解Java中的反射 主要内容: JVM是如何构建一个实例的 .class文件 类加载器 Class类 反射API JVM是如何构建一个实例的 假设main方法中有以下代码: Person p = new Person(); 会经历以下这个过程: 通过new创建实例和反射创建实例,都绕不开Class对象。 .class文件 有人用编辑器打开.class文件看过吗? 比如我现在写一个...

Cheng_MY的博客 313
上一篇: Maven多模块项目搭建+SSM框架整合
下一篇: 对Java中注解的理解
ProgrammingWay
博客等级 码龄9年 58粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值