首页 > 编程语言 >JAVA 反射

JAVA 反射

时间:2024-04-10 12:13:23浏览次数:27  
标签:反射 JAVA 对象 Object 获取 Class

JAVA 反射

目录

什么是JAVA反射

  • 就是在运行时候可以动态的获取成员变量,方法。动态调用该类的方法。被称之为JAVA反射
  • 要使用该类的反射,必须获取到该类的字节码对象.解剖该类就要使用到Class类中的方法。所以先要获取到每一个字节码文件对应的Class类型的对象。
  • 反射就是把JAVA类中的各种成分映射成一个个java对象。
  • 例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象

类的加载过程

  • Class 对象的由来是将clas文件读入内存,并为之创建一个Class对象。

Class 详解

  • Class 类的实例表示正在运行的Java 应用程序中的类和接口。也是jvm中有N多的实例每个类都有该Class对象(包括基本数据类型)
  • Class 没有公共构造方法。Class 对象是在加载类时由Java虚拟机调用类加载器中的fefineClass方法自动构造的。也就是不需要我们去处理创建对象,JVM已经帮我们创建好了。
  1. 获取Class对象的三种方式
    1. Object -> getClass 方法
    2. 任何对象包含基本数据类型都有一个静态的class的属性
    3. 通过Class类的静态方法 forName 指定类的所在的全路径(包含包名和类名)

    其中1是因为Object类中的getClass方法、因为所有类都继承Object类。从而调用Object类来获取
    一般使用第三种,第一种基本已经拿到了对象,无需在反射; 第二种需要显示导入包,无包路径则编译报错,强依赖;第三种 传入一个字符串 可以从配置文件中读取 方便
    在运行期间,一个类,只有一个Class对象产生。

  2. 获取构造
    1. 获取公有
    2. 获取私有 私有方法需要 con.setAccessible(true)
    3. 支持批量获取
    4. newInstance是 Constructor类的方法(管理构造函数的类) 返回的是Object类
  3. 获取成员变量并调用
    1. Field[] getFields()获取所有的公有字段
    2. Field[] getDeclaredFields() 获取所有字段,包括:私有、受保护、默认、公有;
    3. Field getField(String fieldName) 获取某个公有的字段
    4. Field getDeclaredField(String fieldName):获取某个字段(可以是私有的)
    5. 设置字段的值 ield --> public void set(Object obj,Object value): obj:要设置的字段所在的对象; value:要为字段设置的值
  4. 获取成员方法并调用
    1. Method[] getMethods():获取所有"公有方法";(包含了父类的方法也包含Object类)
    2. Method[] getDeclaredMethods():获取所有的成员方法,包括私有的(不包括继承的)
    3. Method getMethod(String name,Class<?>... parameterTypes): name : 方法名 Class ... : 形参的Class类型对象
    4. Method getDeclaredMethod(String name,Class<?>... parameterTypes)
    5. 调用方法:public Object invoke(Object obj,Object... args): obj : 要调用方法的对象 args:调用方式时所传递的实参
  5. 反射方法使用场景
    1. 通过反射运行配置文件内容 当类发生变化只需要修改配置文件 无需修改代码.
    2. 通过反射越过泛型检查

参考博客

标签:反射,JAVA,对象,Object,获取,Class
From: https://www.cnblogs.com/heyanfeng/p/18125555

相关文章

  • JavaWeb开发:day01
    目录Web开发模式前后端分离开发混合开发网页本质HTML/CSS学习目录官方文档:w3school.com.cn首页选择HTML5--参考书HTML快速入门案例:实践:创建一个自己网页2024/4/10Web开发模式前后端分离开发混合开发网页本质HTML负责网页结构(元素和内容);CSS控制页面样式和表现;JS控......
  • JavaWeb开发:day01
    JavaWeb--01Web开发模式前后端分离开发混合开发网页本质HTML/CSS学习目录官方文档:[w3school.com.cn](http://www.w3school.com.cn/)首页选择HTML5--参考书HTML快速入门案例:实践:创建一个自己网页总结2024/4/10Web开发模式前后端分离开发混合开发网页本......
  • JavaWeb开发:表单、框架、层
    JavaWeb开发:表格、框架和层表格表格的创建与表相关的标记表格的标题、标头表的对齐方式合并单元格跨行跨列单元间隔和单元填充框架frame元素rows元素frame的元素内嵌框架(iframe)层层简介创建层表单的设计什么是表单form表单的三个要点表单输入元素<input>属性“inpu......
  • 03-JAVA设计模式-代理模式详解
    代理模式什么是代理模式Java代理模式是一种常用的设计模式,主要用于在不修改现有类代码的情况下,为该类添加一些新的功能或行为。代理模式涉及到一个代理类和一个被代理类(也称为目标对象)。代理类负责控制对目标对象的访问,并可以在访问前后添加一些额外的操作。核心作用:通......
  • Spring Boot集成JavaMailSender发送邮件,支持二进制流
    什么是JavaMailSenderJavaMailSender是SpringFramework中的一个接口,用于发送电子邮件。它是Spring对JavaMailAPI的封装,提供了更简单和更方便的方式来发送邮件。JavaMailSender接口定义了一组发送邮件的方法,包括发送简单文本邮件、发送带附件的邮件、发送HTML格式的邮件等。它隐......
  • java switch 自定义表格的渲染和编辑示例
    目录正常使用表格自定义表格样式正常使用表格很简单,使用一次就知道了,不过多介绍。//创建JTable实例,使用默认的模型JTabletable=newJTable();//设置表格数据Object[][]data={ {1,"Apple",10.0}, {2,"Banana",5.0}, {3,"Orange",8.0}};Object[]col......
  • 基于Springboot+Vue的Java项目-月度员工绩效考核管理系统(附演示视频+源码+LW)
    大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。......
  • 力扣78 子集 Java版本
    文章目录题目描述代码注意题目描述给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例1:输入:nums=[1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例2......
  • 力扣51 N皇后 Java版本
    文章目录题目描述代码题目描述按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的n皇后问题的解决方案。每......
  • Java面试题-13Spring
    1、事务管理spring事务分为编程式事务和声明式事务Spring事务管理器的行为的重要组成部分。下面是对这些属性的简要解释:1.**value**:用于指定事务管理器的名称。如果应用中只有一个事务管理器,通常可以省略该属性。2.**propagation**:指定事务的传播机制,即在多个事务方法相互调......