首页 > 其他分享 >反射

反射

时间:2023-12-19 10:13:39浏览次数:23  
标签:反射 构造方法 ... Object Class 获取 public

允许程序在运行时类进行自我检查并切对内部的成员进行操作

1、概念

主要指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关语义

2、作用

  • 在运行时判断任意一个对象所属的类
  • 在运行时获取类的对象
  • 在运行时访问java对象的属性、方法、构造方法等

3、类库

java.lang.reflect类库中主要的类

  • Field:表示类中的成员变量
  • Method:表示类中的方法
  • Constructor:表示类的构造方法
  • Array:该类提供了动态创建数组和防伪数组元素的静态方法

4、Class

用来表示运行时类型信息的对应类

  • 灭个类都有唯一一个与之相对应的Class对象
  • Class类为类类型,而Class对象为类类型对象

4.1、特点

  1. Class类也是类的一种,class则是关键字
  2. Class类只有一个私有的构造函数,只有JVM能够创建Class类的实例
  3. JVM中只有唯一一个和类相对应的Class对象来描述其类型信息

4.2、获取Class对象的三种方式

在运行期间,一个类,只有一个与之相对应的Class对象产生

  1. Object --> getClass()
  2. 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
  3. 通过Class类的静态方法:forName(String className)(常用)

5、常见用法

image.png

5.1、获取类的构造方法

/*
 * 通过Class对象可以获取某个类中的:构造方法;
 *
 * 获取构造方法:
 *         1).批量的方法:
 *             public Constructor[] getConstructors():所有"公有的"构造方法
               public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有)
 *         2).获取单个的方法,并调用:
 *             public Constructor getConstructor(Class... parameterTypes):获取单个的"公有的"构造方法:
 *             public Constructor getDeclaredConstructor(Class... parameterTypes):获取"某个构造方法"可以是私有的,或受保护、默认、公有;
 *
 *             调用构造方法:
 *             Constructor-->newInstance(Object... initargs)
 */

:::warning
注意:
未加“Declared”字段,只能访问“公有”字段/方法
:::

5.2、获取类的成员变量

/*
 * 获取成员变量并调用:
 *
 * 1.批量的
 *      1).Field[] getFields():获取所有的"公有字段"
 *      2).Field[] getDeclaredFields():获取所有字段,包括:私有、受保护、默认、公有;
 * 2.获取单个的:
 *      1).public Field getField(String fieldName):获取某个"公有的"字段;
 *      2).public Field getDeclaredField(String fieldName):获取某个字段(可以是私有的)
 *
 *   设置字段的值:
 *      Field --> public void set(Object obj,Object value):
 *                  参数说明:
 *                  1.obj:要设置的字段所在的对象;
 *                  2.value:要为字段设置的值;
 */

5.3、获取类的成员方法

/*
 * 获取成员方法并调用:
 *
 * 1.批量的:
 *      public Method[] getMethods():获取所有"公有方法";(包含了父类的方法也包含Object类)
 *      public Method[] getDeclaredMethods():获取所有的成员方法,包括私有的(不包括继承的)
 * 2.获取单个的:
 *      public Method getMethod(String name,Class<?>... parameterTypes):
 *                  参数:
 *                      name : 方法名;
 *                      Class ... : 形参的Class类型对象
 *      public Method getDeclaredMethod(String name,Class<?>... parameterTypes)
 *
 *   调用方法:
 *      Method --> public Object invoke(Object obj,Object... args):
 *                  参数说明:
 *                  obj : 要调用方法的对象;
 *                  args:调用方式时所传递的实参;
 */

参考
Spring源码轻松学 一课覆盖Spring核心知识点

标签:反射,构造方法,...,Object,Class,获取,public
From: https://www.cnblogs.com/meidanlong/p/17912973.html

相关文章

  • 反射
    允许程序在运行时类进行自我检查并切对内部的成员进行操作1、概念主要指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关语义2、作用在运行时判断任意一个对象所属的类在运行时获取类的对象在运行时......
  • 别再重复造反射轮子了,Spring 中的 ReflectionUtils 工具类,应有尽有!
    作者:策马踏清风链接:https://www.jianshu.com/p/756778f5dc87ReflectionUtils是spring针对反射提供的工具类。handleReflectionException异常处理推荐一个开源免费的SpringBoot实战项目:https://github.com/javastacks/spring-boot-best-practice源码:publicstaticv......
  • 关于C#反射概念,附带案例!
    反射C#中的反射是一种使程序在运行时能够动态地获取类型信息并调用其成员的技术。通过反射,程序可以在运行时进行类型的动态加载、创建对象、调用方法和属性,以及访问和修改字段等。反射可以使程序更加灵活,但也增加了一定的性能开销。在C#中,反射主要是通过System.Reflection命名空......
  • 反射与约束
    一,反射模块1f0=923deff1():4print('F1')56deff2():7print('F2')89deff3():10print('F3')1112deff4():13print('F4')1415deff5():16print('F5')如果调用上......
  • 掌握C#:深入理解特性(Attributes)与反射(Reflection)的妙用
    文章目录特性Attribute预定义特性AttributeUsageConditional(常用)Obsolete常用Attribute自定义特性声明自定义特性构建自定义特性应用自定义特性反射Reflection反射优缺点反射(Reflection)的用途查看元数据实例特性AttributeC#中的特性(Attributes)是一种用于在声......
  • Java之反射(重要 · 下)
    创建对象Class类提供了一个实例方法newInstance(),通过该方法可以创建对象,使用起来比较简单。调用构造方法packagejava2023_08_10;importjava.lang.reflect.Constructor;publicclassConstructorReflect{ publicstaticvoidmain(String[]args){ //TODOAuto-genera......
  • Java 通过反射获取注解属性信息以及状态中字典
    一、创建存储对象importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/***属性对象存储类*/publicclassMetadataField{/***key对应对象中间的属性*/privateStringkey;/***字......
  • 注解与反射
    注解与反射注解注解:就是以@开头的比如:@Override内置注解例如:@Override:重写注解@Deprecated:表示已过时的注解(不推荐使用某方法)@SuppressWarnings(String[]value()):镇压警告,参数是value=一个字符串数组元注解修饰其他注解的注解@Target:描述注解的使用范围@Retention:表......
  • 【漏洞分析】Reflection Token 反射型代币攻击事件通用分析思路
    在本篇文章中,我将通过一个攻击事件引出ReflectionToken攻击事件的一个通用分析思路。关于ReflectionToken的其他案例分析,可以参考BEVO代币攻击事件分析及复现一文。TomInu攻击事件TomInuToken是一个反射型代币reflectiontoken,于2023-01-26遭到黑客攻击,攻击者获利355......
  • 单元测试:Junit框架、反射、注解、动态代理
    单元测试:Junit框架单元测试单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性目前测试方法的方式的和存在的问题方式:只有一个main方法,如果一个方法的测试失败了,其他方法测试会受到影响问题:①无法得......