首页 > 编程语言 >Java反射机制

Java反射机制

时间:2022-09-05 09:59:46浏览次数:55  
标签:反射 Java 变量 构造方法 成员 获取 参数 机制 方法

一、 获取字节码 c (三种方法)

  • . Class
  • .getClass()
  • .Class.forName("完整的全路径")

二、 获取构造方法

1.c 通过下列方法得到构造方法的对象 con (四种方法)

  • getConstructor(参数个数,参数类型),获取指定的公共构造方法
  • getConstructors(),获取公共构造方法
  • getDeclaredConstructor(参数个数,参数类型),获取指定的构造方法
  • getDeclaredConstructors(),获取全部构造方法

2. con 通过.newInstance()创建一个实例对象 obj

如果是通过.getDeclaredConstructor()获得的对象,是无法用私有的构造方法实例化的,所以要先.setAccessible(true),取消访问检查即可

三、 获取成员变量

1. c 通过下列方法实例化一个成员变量 addressField

  • getField(String name 成员变量的名字),获取指定的公共成员变量对象
  • getDeclaredField(String name 成员变量的名字),获取指定的成员变量对象

可以通过.getFields()或getDeclaredFields()返回包含所有成员变量的数组的对象fields(这个数组包含有所有成员变量)

2. 给 obj 的成员变量 addressField 赋值 “西安“

addressField . set(obj,”西安”)

//如果addressField是私有的,要用addressField.setAccessible(true) 取消访问检查

四、 获取成员方法

1. c 通过下列方法可以获得成员方法

  • .getMethod(String name 方法名字 , args 参数),获取公共的方法
  • .getDeclaredMethod(String name 方法名字 , args 参数),获取方法
  • .getMethods(),返回一个数组,该数组包括所有方法以及继承的和超类中的方法
  • .getDeclaredMethods(),返回一个只包含本类的所有方法的数组

例:Method m = c.getMethod(“method1”)

2. 调用成员方法

//调用obj对象的m成员方法(method1方法)

m . invoke(obj 实例化的对象, args 参数)

//没有参数就不用写参数,如果method1是私有的,就要m.setAccessible(true)取消访问检查

五、 反射可以越过泛型检查

例如,通过反射可以往ArrayList里添加字符串数据

六、 反射可以运行配置文件的指定内容

标签:反射,Java,变量,构造方法,成员,获取,参数,机制,方法
From: https://www.cnblogs.com/Gege-1/p/16657013.html

相关文章

  • java随笔(七)——多线程(比较详细)
    线程线程是进程中单个的顺序控制流,是一条执行路径单线程:一个进程如果只有一条执行路径,则称为单线程程序多线程:一个进程如果有多条执行路径,则称为多线程程序多线程的实......
  • 反射加缓存,解决不同的业务下调用不同的实现
    根据前端传入不同的支付code,动态找到对应的支付方法,发起支付。我们先定义一个注解。@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public@inter......
  • Java运行机制
    Java运行机制高级语言的运行机制我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译......
  • 动画标签 HTML CSS JavaScript
    动画标签HTMLCSSJavaScript动画标签HTMLCSSJavaScript免费下载HTML:<linkrel="样式表"href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1......
  • Java多线程相关概念
    Java多线程相关概念1.并发是在同一实体上的多个事件,是在同一台处理器上“同时”处理多个任务,同一时刻,其实是只有一个事件在发生2.并行是在不同实体上的多个事件,是在......
  • java关于序列化的理解
     序列化是将数据变成可以传输的形式: 1.java对象的形式 2.二进制形式 再通过IO传输;可以通过网络传输也可以将数据保存到文件中或者从文件中取出。 java中通过......
  • Javaweb10-javaweb其他知识点
    1、详解DefaultServlet与JspServlet参考博客-->详解DefaultServlet与JspServlet1.1DefaultServlet小结当服务端收到关于Servlet的请求之后交由自定义Servlet处理。当......
  • 2022年JDK安装(Java安装)详细教程(window)
    ​ 目录一、下载1、下载二、安装1、jdk安装2、jre安装三、检测 一、下载1、下载链接:https://pan.baidu.com/s/1x9xh93LvjqfaPqbByRhgqA提取码:6bso--来自百......
  • JavaScript-6 简介:属性、方法和内置对象
    JavaScript-6简介:属性、方法和内置对象特性当我们向JavaScript程序添加一条新数据时,浏览器会将其保存为该数据类型的一个实例。并且所有数据类型都可以访问传递给每个......
  • Java自定义注解
    简介注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时......