首页 > 其他分享 >2.反射

2.反射

时间:2023-09-29 17:46:26浏览次数:35  
标签:反射 构造方法 对象 成员 获取 方法 Class

反射

概述:

反射允许对成员变量,成员方法和构造方法的信息进行编程访问;
是从class字节码文件中获取的;

获取Class对象

  1. Class.forName("全类名");
  2. 类名.class;
  3. 对象.getClass();

利用反射获取构造方法:

Class类中用于获取构造方法的方法:
Constructor<?>[] getConstructors()					返回所有公共构造方法对象的数组
Constructor<?>[] getDeclaredConstructors()			返回所有构造方法对象的数组
Constructor<?> getConstructor(Class<?>... parameterTypes)		返回单个公共构造方法对象(参数为类型的Class对象)
Constructor<?> getDeclaredConstructor(Class<?>... parameterTypes)	返回单个构造方法对象
  • 获取构造方法里的详细信息的方法(Constructor内的成员方法):
int getModifiers()					获取构造方法的修饰符状态码
Parameters[] getParameters()		获取构造方法中的所有参数
setAccessible(boolean b)			临时取消权限校验,可以让newInstance方法使用私有的构造方法创建对象
Object newInstance(构造方法的参数)		用该构造方法创建对象
Class类中用于获取成员变量的方法:
Field[] getFields()							返回所有公共成员变量对象的数组
Field[] getDeclaredFields()					返回所有成员变量对象的数组
Field getField(String name)					返回单个公共成员变量对象,参数里是变量名
Field getDeclaredField(String name)			返回单个成员变量对象,参数里是变量名
  • 获取成员变量里的详细信息的方法(Field内的成员方法):
int getModifiers()						获取权限修饰符
String getName()						获取成员变量的名字
Class<?> getType()						获取成员变量的数据类型
void set(Object obj,Object value)		赋值,将参数二的值,赋值给对象里对应的成员变量
										参数一:需要修改的对象, 参数二:值, 对饮的成员变量:调用方法的对象
setAccessible(boolean b)				临时取消权限校验,可以使get方法可以获得私有化成员变量的值
Object get(Object obj)					获取值
Class类中用于获取成员方法的方法:
Method[] getMethods()				返回所有公共成员方法对象的数组,包括继承的
Method[] getDeclaredMethods()		返回所有成员方法对象的数组,不包括继承的
Method getMethod(String name,Class<?>... parameterTypes)		返回单个公共成员方法对象(参数二是形参的Class对象)
Method getDeclaredMethod(String name,Class<?>... parameterTypes)		返回单个成员方法对象
  • 获取成员方法里的详细信息的方法(Method内的成员方法):
int getModifiers()						获取权限修饰符
String getName()						获取成员变量的名字
Parameter[] getParameters()				获得方法的形参
Class[] getExceptionTypes()				获取方法抛出的异常
Object invoke(Object obj,Object...args)	运行方法
	参数一:	用obj对象调用该方法
	参数二:	调用方法的传递的参数(如果没有就不写)
	返回值:	方法的返回值(如果没有就不写)

标签:反射,构造方法,对象,成员,获取,方法,Class
From: https://www.cnblogs.com/chj020415/p/17737124.html

相关文章

  • jsp 之反射型 xss 示例
    jsp代码如下:<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><body><formaction=""method="get">姓名:<inputname="name"type......
  • golang 反射
    参考https://www.cnblogs.com/jiujuan/p/17142703.htmlfloat反射示例packagemainimport( "fmt" "reflect")funcmain(){ varxfloat64=1.2345 fmt.Println("==TypeOf==") t:=reflect.TypeOf(x) fmt.Println("type:&quo......
  • 反射 内置方法
    如何实现反射:classPeople:def__inti__(self,name,age):self.name=nameself.age=agedefsay(self):print('<%s;%s>'%(self.name,self.age))obj=People('猪猪同学',18)  classFtp:defput(self):print('正在执行上传功......
  • 反射
    反射是指对一个程序集中的元数据进行检查的过程。说明白一点,就是可以访问和使用一个dll里面所有的东西,并且是运行动态时的调用,而不是普通编译时的绑定,这样使程序更加的自由和灵活,但是性能较低。反射一般可以用于:插件的开发、特性和程序的动态调用等等。1.首先我们写一个类,实现他......
  • go 反射
     一.go反射介绍和定义 在Go语言中,反射机制是一种动态获取变量类型和值信息的机制,它可以让程序在运行时动态地获取对象的类型信息、调用对象的方法、修改对象的属性等。通过反射机制,Go程序可以更加灵活和可扩展,但同时也会带来一些性能开销和复杂度。在Go语言中,反射机制主......
  • 在 Net7.0环境下通过反射创建对象和调用方法
    一、介绍最近没事干,就用闲暇时间写点东西,也记录一下温习历程。老人说的好,好记性,不如烂笔头。时间一长,当时记忆的再清楚,都会变得模糊,索性就写博客记录下来,如果下次需要,直接打开博客就找到了,不用去网上乱找了。今天我要写一些有关反射创建类型实例和调用方法的文章,......
  • 反射修改String中的value属性(char[])
    上图结论:可以通过反射获取String对象的value属性,然后有两种方式修改:1.构建一个新的char[]数组进行替换 2.构建一个char[]指向同一对象,对该对象中的内容进行修改(即char[0='X'])反射结论:对于private修饰的字段,可以利用setAccessible(true)函数处理;同时,反射可以直接处理final或者s......
  • AOP和反射的使用——自动填充公共字段
      在写业务代码时候,我们经常会在业务层对数据实体进行一些重复的传参,例如更新日期时间。这太麻烦了,为了减轻代码量,我们可以利用AOP和反射对代码进行一些调整,免去这些重复操作。也帮助我们对反射的实际应用有一定认识。   首先自定义一个注解@Target(ElementType.METHOD)//......
  • Java反射
    声明:本文记录基于JDK8(8u211)的继承使用规则如果存在错误,请发邮件至[email protected]联系我创作时间:2023-09-1617:00:21创作情况:失业第46天,地处成都金牛区创作者:一口吃不成胖子反射准备工作,以供对照描述与代码,想看结论直接到文末尾父类packagecom.beans;/***抽象......
  • JAVA反射(一)获取Class对象的三种方式及其区别
    publicclassClassModel{static{System.out.println("staticblock");}{System.out.println("dynamicblock");}}publicclassClassTest{publicstaticvoidmain(String[]args){//方式......