面试官: 反射了解么?

news2025/2/25 15:53:23

目录

反射

什么是反射 ?

获取Class对象的四种方式

反射相关API

类对象常用API

Filed常用API

Method常用API

Constructors常用API

反射的使用场景?

反射的实现原理 ?(todo)

反射为什么这么慢 ?

反射的优缺点

反射中,Class.forName和ClassLoader的区别 ?

int.class 与 Integer.class的区别是什么 ?

利用反射与工厂模式实现SpringIOC


反射

什么是反射 ?

对于反射

就类似于你想要进入一个房子,你没有钥匙,但是你知道这个房子是谁的,我们就可以通过反射API知道房子中的内部结构,具体都有啥.

也就是说通过反射你就可以构造对象,知道对象属于某个类,可以获取类的属性和方法,获取到我们就可以调用属性和方法, 这种动态获取程序信息的能力,以及动态调用对象的能力我们就称为反射.

在换句话讲,通过反射你就可以知道类的方法和属性,并可以调用它们

在Java中有一个java.lang.reflect这个包就是实现了反射相关的类库,比如Construct,Field,Method...

获取Class对象的四种方式

Class是反射的入口

如果我们动态获取到这些信息,我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序。Java 提供了四种方式获取 Class 对象:

1. 知道具体类的情况下可以使用:

Class alunbarClass = TargetObject.class;

但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此方式获取 Class 对象不会进行初始化

2. 通过 Class.forName()传入类的全路径获取:

Class alunbarClass1 = Class.forName("cn.sfx.TargetObject");

3. 通过对象实例instance.getClass()获取:

TargetObject o = new TargetObject();
Class alunbarClass2 = o.getClass();

4. 通过类加载器xxxClassLoader.loadClass()传入类路径获取:

ClassLoader.getSystemClassLoader().loadClass("cn.sfx.TargetObject");

通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态代码块和静态对象不会得到执行

反射相关API

类对象常用API

Filed常用API

Method常用API

Constructors常用API

反射的使用场景?

  • 动态代理
  • 注解

反射的实现原理 ?(todo)

反射为什么这么慢 ?

反射的优缺点

优点 :

  • 提高程序的灵活性
    • 通过反射机制我们就可以让程序创建和控制任何类的对象

    • 通过反射机制,我们可以在程序运行的时候,判断对象所属的类,构造任意一个类的对象,获取到任意一个类所具有的方法,属性,可以动态的调用对象的方法

缺点 : 

  • 代码的可读性低
  • 反射破坏封装
  • 反射的代码性能极低

反射中,Class.forName和ClassLoader的区别 ?

int.class 与 Integer.class的区别是什么 ?

int.class是基本数据类型int的Class对象,用于获取基本数据类型的相关信息。
Integer.class是java.lang.Integer包装类的Class对象,用于获取包装类的相关信息。

利用反射与工厂模式实现SpringIOC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于JAVA的就医保险管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

LZO无损数据解压缩IP,高性能版本

LZOAccel-D LZO Data Decompression Core/无损数据解压缩IP Core LZOAccel-D是一个无损数据解压缩引擎的FPGA硬件实现,兼容LZO 2.10标准。 Core接收压缩的输入数据块,产生解压缩后的数据块。Core分析数据块的头和尾,检查输入数据块的错误&…

第十一届上海国际蒸发结晶展将于12月11-13日上海举办

展会介绍: 蒸发结晶展是我司2013年创办。通过这几年我司不断努力,得到行业逐步认可,受到行业和企业的一致肯定和积极评价,具有较高的知名度和行业影响力,也具有一定国际知名度的蒸发结晶专业会展活动之一。蒸发结晶技…

网络安全与IP安全网络安全

网络安全与IP安全网络安全 网络安全 是指网络系统的硬件,软件以及系统中的数据收到的保护。 保护的基本属性为:机密性,身份认证,完整性和可用性; 基本特征:相对性,时效性,相关性…

springboot自写插件封包

在Spring Boot中自写插件或封包(通常指的是创建自定义的starter)是一种常见的做法,用于将一系列相关的配置和组件打包成一个独立的模块,从而简化依赖管理和配置过程。以下是一个简单的步骤,指导你如何创建一个自定义的…

2024牛客寒假算法基础集训营2

目录 A.Tokitsukaze and Bracelet B.Tokitsukaze and Cats C.Tokitsukaze and Min-Max XOR D.Tokitsukaze and Slash Draw E and F.Tokitsukaze and Eliminate (easy)(hard) G.Tokitsukaze and Power Battle (easy) 暂无 I.Tokitsukaze and Short Path (plus) J.Tokits…

P0故障应对策略之:为什么P0故障难以排查

与大模型探讨P0故障 P0级故障,作为系统中最严重的故障,它们的发生往往带来灾难性的后果和巨大的损失。同时,这类故障的排查与修复也往往复杂而棘手,对整个团队的经验、综合能力、应急处置流程都是巨大的挑战。 排查P0级故障的过程…

react useMemo 用法

1,useCallback 的功能完全可以由 useMemo 所取代,如果你想通过使用 useMemo 返回一个记忆函数也是完全可以的。 usecallback(fn,inputs)is equivalent to useMemo(()> fn, inputs). 区别是:useCallback不会执行第一个参数函数,而是将它返…

linux查看socket信息

netstat netstat 是一个用于显示网络相关信息的命令行工具。它可以显示当前系统的网络连接状态、路由表、接口统计信息等。 下面是一些常见的 netstat 命令选项和用法: 显示所有活动的网络连接: netstat -a 显示所有正在监听的端口: ne…

TiDB之分布式数据库TiDB 操作管理规范【附可下载文档】

一、 目的 为了在软件生命周期内规范数据库相关的设计、开发、运维工作,便于不同团队之间的沟通及协调,制定此文档,以期在相关规范上达成共识和默契,提升相关环节的工作效率及系统的可维护性。同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好保证…

飞行棋网站源码

最近抖音很火的情侣飞行棋网站源码,这款情侣飞行棋提供了丰富的游戏玩法,可以为情侣、朋友或家人带来欢乐的游戏体验。无论是在家中,还是在聚会、旅行等场合,都可以轻松启动该网站,共同享受游戏的乐趣。 源码获取搜一搜…

【BUG 记录】史诗级 BUG - MYSQL 删库删表却没有备份如何恢复数据

【BUG 记录】史诗级 BUG - MYSQL 删库删表却没有备份如何恢复数据 1. 问题描述2. 解决方案(binlog)2.1 构造测试环境2.2 查看 MySQL 环境是否开启 binlog2.3 查看所有的 binlog 日志记录2.4 查看当前正在使用的是哪一个 binlog 文件2.5 查看此时的 binlo…

Redis 发布订阅详解

Redis 发布订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。 Redis 有两种发布订阅模式 基于频道(Channel)的发布订阅基于模式&#xff…

腾讯云4核8G服务器有用过的吗?性能咋样?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

MySQL进阶45讲【26】主库出问题了,从库怎么办?

1 前言 在前面的MySQL进阶45讲【23】MySQL是怎么保证主备一致的?、MySQL进阶45讲【24】MySQL是怎么保证高可用的?和MySQL进阶45讲【25】备库为什么会延迟好几个小时?3篇文章中,介绍了MySQL主备复制的基础结构,但这些都…

Python算法100例-2.5 存钱

完整源代码项目地址,关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序 1.问题描述 假设银行整存整取存款不同期限的月利率为: 0.63%,期限为1年; 0.66%,期限为2年…

Java练习(第4天)【总结】反转字符串的9种不同实现方法

一、问题描述 给定一个字符串,输出反转后的字符串。 样例输入1: abc 样例输出1: cba 样例输入2: GeeksforGeeks 样例输出2: skeeGrofskeeG 二、Java实现(九个程序) 1、实现1 思想: 逐个取 倒序拼 Java代码: i…

测试开发(6)软件测试教程——自动化测试selenium(自动化测试介绍、如何实施、Selenium介绍 、Selenium相关的API)

接上次博客:测试开发(5)测试分类标准 :按测试对像划分、按是否查看代码划分、按开发阶段划分、按测试实施组织、按是否运行划分、按是否手工划分、按测试地域划分-CSDN博客 目录​​​​​​​ 什么是自动化测试 自动化测试介绍…

【Unity自制手册】Unity—Camera相机跟随的方法大全

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

微信小程序蓝牙通信HC08

总结这两天研究的蓝牙串口。人话版资料不多,主要靠翻别人的仓库和文档。 单片机部分,与蓝牙串口通信是通过串口。比我想的要简单,小程序部分,有非常多的服务和特征,而且人话版资料不多。 如果本文有什么问题&#xf…