当前位置: 首页 > news >正文

反射机制了解

反射概念

了解反射背景

存在某些变量或形参的声明类型是Object类型,但是程序却需要调用该对象运行时类型的方法,该方法不是Object中的方法,如何解决。转到如何获取该对象运行时类型的方法。
只能运行时才能获取,这就用到反射。

反射概述

Reflection被视为动态语言的关键。允许程序在运行期间借助Reflection API 取得任何类的内部信息,并能直接操作任何对象的内部属性和方法。
例如下面的案例,获取类的属性和方法,两种都是可行的。

 @Testpublic void test() {// 创建Person类的实例Person1 person1 = new Person1();// 调用Person类的属性和方法// 调用属性person1.age = 10;System.out.println(person1.age);// 调用方法person1.show();}/*使用反射完成上述的操作*/@Testpublic void test1() throws Exception {// 调用构造器方法Class<Person> personClass = Person.class;Person person = personClass.newInstance();System.out.println(person);// 调用属性,先获取age属性Field ageField = personClass.getField("age");// 然后通过属性设置对象内部的属性值,之前是通过对象调用方法设置属性值ageField.set(person, 10);System.out.println(ageField.get(person));// 调用方法Method showMethod = personClass.getMethod("show");showMethod.invoke(person);}

反射机制提供的功能

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

Class类,java反射的源头

获取class实例的方式:

  • 调用运行时类的静态属性class
  • 调用运行时类的对象getClass()
  • 调用Class的静态方法,forName(String className)
  • 使用类的加载器方式

了解类的加载过程:
过程1:类的装载(loading)
将类的class文件读入内存,并为之创建一个java.lang.Class对象。此过程由类加载器完成

过程2:链接(linking)

  • 验证(Verify):确保加载的类信息符合JVM规范,例如:以cafebabe开头,没有安全方面的问题。
  • 准备(Prepare):正式为类变量(static)分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配。
  • 解析(Resolve):虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程。

过程3:初始化(initialization)
执行类构造器()方法的过程。
类构造器()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。

相关文章:

反射机制了解

反射概念 了解反射背景 存在某些变量或形参的声明类型是Object类型&#xff0c;但是程序却需要调用该对象运行时类型的方法&#xff0c;该方法不是Object中的方法&#xff0c;如何解决。转到如何获取该对象运行时类型的方法。 只能运行时才能获取&#xff0c;这就用到反射。 …...

机器学习策略Ⅰ

机器学习策略Ⅰ 在构建一个好的监督学习系统时&#xff0c;通常需要确保以下四个方面&#xff1a; 系统需要在训练集上能够很好地拟合数据&#xff0c;达到某种可接受的性能水平&#xff08;如接近人类水平&#xff09;。如果训练集表现不好&#xff0c;可以使用更大的模型&…...

redis中的bigkey及读取优化

一、bigKey介绍 1、简介 在 Redis 中,Big Key(大键)指的是占用大量内存的单个键。通常,Redis 是一个高性能的内存数据库,但是当某些键变得非常大时,会带来性能上的影响。例如,大量的内存消耗、长时间的操作延迟,甚至可能导致 Redis 停止响应或崩溃。 通俗的来说,指…...

【西瓜书】支持向量机(SVM)

支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;。 超平面 分类学习最基本的想法就是基于训练集合D在样本空间中找到一个划分超平面&#xff0c;将不同类别的样本分开。 但能将训练样本分开的划分超平面可能有很多&#xff0c;应该努力去找到哪…...

三维渲染中顺序无关的半透明混合(OIT)(二——Stencil Route)

1、A-Buffer算法。 在谈到Stencil Route之前&#xff0c;需要先讨论A-Buffer算法。A-Buffer是一种图形学&#xff08;渲染方向&#xff09;上的用于可见面分析(Visble Surface Detection)的技术&#xff0c;是Z-Buffer的衍生方法。 Z-Buffer是用于剔除 不透明 物体的算法。假…...

(SAST检测规则-3)固定的 SessionID 缺陷详解

漏洞类型&#xff1a; 会话固定攻击&#xff08;Session Fixation Attack&#xff09; 漏洞描述&#xff1a; 会话固定攻击是利用服务器的会话管理机制存在漏洞&#xff0c;攻击者通过提前控制或预测用户的会话标识符&#xff08;Session ID&#xff09;&#xff0c;当用户登录…...

【安卓开发】【Android Studio】项目构建(Build)时报错:Integer Overflow

一、问题描述 在安卓项目中&#xff0c;构建&#xff08;Build&#xff09;失败并报错&#xff1a;xxxxx Integer Overflow&#xff08;整型溢出&#xff09;。 二、相关代码 刚开始以为是某个整数&#xff08;例如控件、java类&#xff09;不匹配造成的&#xff0c;检查如下…...

STM32主要功能

STM32 是由意法半导体&#xff08;STMicroelectronics&#xff09;推出的一系列基于 ARM Cortex-M 内核的微控制器&#xff08;MCU&#xff09;。STM32 微控制器广泛应用于嵌入式系统中&#xff0c;因其高性能、低功耗、丰富的外设接口和多种封装形式而被广泛采用。其主要功能和…...

MacOS 如何连接 Linux NFS 服务器

以 Ubuntu 为例。 Ubuntu 服务器端设置 1. 进入 root 权限&#xff0c;安装 NFS 服务&#xff1a; apt-get update apt-get install nfs-kernel-server2. 创建共享目录&#xff1a; mkdir /data chown nobody:nogroup /data chmod 777 /data3. 配置 /etc/exports 文件: vi …...

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-39

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…...

摄影相关常用名词

本文介绍与摄影相关的常用名词。 曝光 Exposure 感光元件接收光线的过程&#xff0c;决定图像的明暗程度和细节表现。 光圈 Aperture 控制镜头进光量的孔径大小&#xff0c;用 F 值&#xff08;f-stop&#xff09; 表示。 光圈越大&#xff08;F 值越小&#xff09;&#xff0c…...

02.06、回文链表

02.06、[简单] 回文链表 1、题目描述 编写一个函数&#xff0c;检查输入的链表是否是回文的。 2、解题思路&#xff1a; 快慢指针找中点&#xff1a; 利用快慢指针的技巧来找到链表的中间节点。慢指针 slow 每次移动一步&#xff0c;而快指针 fast 每次移动两步。这样&…...

Shell脚本小练习

学习了这么长时间Shell脚本&#xff0c;总得来一次小小的练习吧&#xff0c;那么请看下文&#xff01; 1.用Shell写一个小计算器。 通过read命令获取用户输入的表达式&#xff0c;表达式的格式设定为操作数1 运算符 操作数2&#xff0c;例如53&#xff0c;然后利用设计的脚本…...

四轮转向轮式里程计设计(python)

目录 写在前面的话参考教程官方教程参考代码&#xff08;c&#xff09; 关键代码解析订阅车轮速度订阅车轮转向订阅四轮转向控制模式积累速度和转向角发布里程计 完整代码完整视频演示 写在前面的话 上一篇博客&#xff1a;键盘控制车子四轮转向 这篇文章通过订阅车轮的速度和…...

多方法做配对样本t检验(三)

Wilcoxon符号秩检验 Wilcoxon符号秩检验&#xff08;Wilcoxon Signed-Rank Test&#xff09; 是一种非参数统计方法&#xff0c;用于检验两组相关样本&#xff08;配对样本&#xff09;之间的差异是否显著。它通常用来代替配对样本t检验&#xff0c;特别是在数据不符合正态分布…...

Vue 将推出「无虚拟DOM」版本,又是新的前端框架趋势?

文章目录 背景无虚拟DOM版的Vue3Vue Vapor 在线演练题外话&#xff1a;渲染流程 背景 随着 React 和 Vue 这些前端框架的爆火&#xff0c;他们的渲染方式&#xff0c;虚拟DOM&#xff0c;也跟着火了起来&#xff0c;大家都认为这是一种高性能批量更新DOM的方式但是近一两年有不…...

阿里云ECS服务器磁盘空间不足的几个文件

查看磁盘空间命令&#xff1a; df -h /mnt 清零 echo >nohup.out 磁盘空间不足的文件列表&#xff1a; 一、nohup.out&#xff1a;来自"nohup java -jar service.jar &"命令产生的文件&#xff0c;位置在服务jar所在目录 二、access.log&#xff1a;位于…...

从0开始linux(38)——线程(1)线程概念

欢迎来到博主专栏&#xff1a;从0开始linux 博主ID&#xff1a;代码小豪 文章目录 进程与线程线程概念线程的优点线程的独立数据 进程与线程 如果要理解线程&#xff0c;那么进程将会时绕不开的点。首先我们回顾一下我们之前在进程章节当中是如何描述进程的&#xff1f; 进程&…...

Ubuntu源码安装gitlab13.7集群多前端《二》

Ubuntu源码安装gitlab13.7《一》 gitaly需要调整的服务 redis socket->ipbind ....* # 0.0.0.0pg vim /etc/postgresql/14/main/pg_hba.confhost all all ..../32 md5gitaly vim /home/git/gitaly/config.tomlbin_dir "/home/gi…...

身份证OCR 识别 API 接口的发展前景

随着信息时代的到来&#xff0c;大量的身份证数据需要进行整理、存储和管理&#xff0c;OCR 识别技术可以将身份证信息转化为结构化的电子文本&#xff0c;方便后续的数据管理和分析&#xff0c;提高工作效率。 未来&#xff0c;随着人工智能和深度学习等技术的不断发展&#…...

Steam游戏自动破解终极指南:3步实现DRM移除与离线游戏

Steam游戏自动破解终极指南&#xff1a;3步实现DRM移除与离线游戏 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack SteamAutoCrack是一款专业的Steam游戏自动破解工具&#xff0c;通过智…...

别急着格式化!系统崩溃进不去,用这招在Win10恢复环境里解锁BitLocker加密盘

系统崩溃后抢救BitLocker加密数据的终极指南 当Windows系统突然崩溃无法启动&#xff0c;而你的重要数据又存放在BitLocker加密的磁盘中时&#xff0c;那种焦虑感是难以言喻的。很多人第一反应是重装系统或格式化硬盘&#xff0c;但这往往会导致永久性数据丢失。本文将带你深入…...

【开发实战】【memtester】嵌入式系统内存稳定性保障:从工具原理到压力测试场景全解析

1. 为什么嵌入式系统需要内存稳定性测试 在嵌入式产品量产前&#xff0c;内存稳定性测试是硬件验证中最容易被忽视却至关重要的环节。我曾参与过一个智能家居网关项目&#xff0c;设备在实验室运行一切正常&#xff0c;但批量部署后却频繁出现随机重启。经过两周的排查&#xf…...

HEIF Utility终极指南:如何在Windows上免费打开和转换苹果HEIF照片

HEIF Utility终极指南&#xff1a;如何在Windows上免费打开和转换苹果HEIF照片 【免费下载链接】HEIF-Utility HEIF Utility - View/Convert Apple HEIF images on Windows. 项目地址: https://gitcode.com/gh_mirrors/he/HEIF-Utility 还在为iPhone照片在Windows电脑上…...

5分钟搞定!iperf3 Windows版:专业网络性能测试工具完全指南

5分钟搞定&#xff01;iperf3 Windows版&#xff1a;专业网络性能测试工具完全指南 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 你是否曾经怀疑过…...

1、Chrome Elements面板:从入门到精通的网页调试实战指南

1. Chrome Elements面板&#xff1a;你的网页调试瑞士军刀 第一次打开Chrome开发者工具时&#xff0c;那个标着"Elements"的标签页看起来就像是一堆杂乱无章的HTML代码。但当我真正开始理解它的功能后&#xff0c;它迅速成为了我每天使用最频繁的开发工具。Elements面…...

PCI、PCIe与InfiniBand接口技术对比与应用解析

1. 计算机接口技术演进背景在服务器和PC硬件架构中&#xff0c;I/O接口技术始终是决定系统性能的关键因素之一。作为从业15年的系统架构师&#xff0c;我见证了从传统PCI总线到现代高速互连技术的完整演进历程。这种演进并非简单的替代关系&#xff0c;而是针对不同应用场景的技…...

基于LLaMA-2的中文大模型实战:从增量预训练到部署应用

1. 项目概述&#xff1a;当大语言模型说起了中文如果你在2023年关注过开源大语言模型&#xff08;LLM&#xff09;的进展&#xff0c;那么“Chinese-LLaMA-Alpaca”这个名字你一定不陌生。它几乎是当时中文社区里&#xff0c;让Meta开源的LLaMA模型“学会”流利中文对话的代名词…...

OpenClaw工作空间管理工具:自动化文件治理与优化实践

1. 项目概述&#xff1a;一个专为OpenClaw设计的本地化工作空间管理工具如果你和我一样&#xff0c;深度使用过OpenClaw这套开源AI智能体框架&#xff0c;那你一定对那几个核心的Markdown配置文件又爱又恨。AGENTS.md里定义着你的数字员工&#xff0c;SOUL.md是它们的“灵魂”与…...

【信息科学与工程学】【物理/化学科学和工程技术】知识体系018 第十八篇 界面科学02 界面化学特征 (1)

表3 界面化学特征 完整知识地图框架 第一部分:3.1 界面结构与缺陷 3.1.1 界面原子构型 (50个) 3.1.1.1 共格界面 3.1.1.2 半共格界面 3.1.1.3 非共格界面 3.1.1.4 重构界面 3.1.1.5 驰豫界面 3.1.1.6 晶格失配 3.1.1.7 临界厚度 3.1.1.8 失配位错 3.1.1.9 失配位错…...