面试官: 反射了解么?

目录

反射

什么是反射 ?

获取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://xiahunao.cn/news/2812931.html

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

相关文章

【前沿热点视觉算法|Sora|GPT4相关】-显著目标检测的深度增强交叉模态级联网络

计算机视觉算法分享。问题或建议,请文章私信或者文章末尾扫码加微信留言。sora 具体介绍和使用方法:OpenAI Sora 下一代生产力:最新小白必看教程 | 解剖Sora的前世今生 | Sora核心源码目前 openai 官方还未开放 sora 灰度,不过根据…

Linux学习笔记:fork()函数

TOC fork()函数的作用是什么? fork函数一般是用来创建进程的,在fork函数执行后,如果成功创建新进程就会出现两个进程,一个是父进程,一个是子进程 就像火影忍者中的分身术一样,fork之后就会进程就会分出和他一样的分身出来 fork()函数怎么使用? 在使用fork函数之前需要加上…

腾讯云4核8G服务器收费贵不贵?

腾讯云4核8G服务器多少钱?轻量应用服务器4核8G12M带宽一年446元、646元15个月,云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元,5年6490.44元,标准型SA2服务器1444.8元一年,在txy.wiki可以查询详细配置和精准报价…

kubeadm部署K8S

部署二主二从 主1:192.168.116.17 主2:192.168.116.18 从1:192.168.116.12 从2:192.168.116.13 注意事项: master节点的cpu核心数必须要求大于2 K8S最新版本并不一定是最好的,相对于旧版本&#xff…

RISC-V SoC + AI | 在全志 D1「哪吒」开发板上,跑个 ncnn 神经网络推理框架的 demo

引言 D1 是全志科技首款基于 RISC-V 指令集的 SoC,主核是来自阿里平头哥的 64 位的 玄铁 C906。「哪吒」开发板 是全志在线基于全志科技 D1 芯片定制的 AIoT 开发板,是目前还比较罕见的使用 RISC-V SoC 且可运行 GNU/Linux 操作系统的可量产开发板。 n…

配置用户通过IPv6方式上网

组网需求 运营商为企业分配了WAN侧的IPv6地址1111:2222:A0EE:6::2/64和LAN侧的IPv6地址1111:3333:E840:2::1/64,企业通过运营商提供的IPv6地址配置上网。 图1 配置用户通过IPv6方式上网 操作步骤 1、在IPS上的配置 interface GigabitEthernet0/0/4 ipv6 enable…

【视频编码\VVC】量化基础知识

量化:是将信号的连续取值(大量离散取值)映射为有限多个离散赋值的过程。实现信号取值多对一的映射。可以有效减少信号取值的空间,进而获得更好的压缩效果。 根据输出和输入数据的类型,可以将量化器分为标量量化SQ和矢…

java中容器继承体系

首先上图 源码解析 打开Collection接口源码&#xff0c;能够看到Collection接口是继承了Iterable接口。 public interface Collection<E> extends Iterable<E> { /** * ...... */ } 以下是Iterable接口源码及注释 /** * Implementing this inte…

代码随想录Leetcode474. 一和零

题目&#xff1a; 代码(首刷看解析 2024年2月26日&#xff09; class Solution { public:// 二维 0 1背包int findMaxForm(vector<string>& strs, int m, int n) {// 1 二维 [i]表示 0 的个数&#xff0c;上限m; [j]表示 1 的个数&#xff0c;上限nvector<vector…

Project_Euler-13 题解

Project_Euler-13 题解 题目 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 2306758820753934617117198…

备战蓝桥杯Day17 - 链表

链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分&#xff1a;数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接&#xff0c;形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …

超声波气泡传感器检测原理

超声气泡传感器 超声波气泡传感器利用超声波在液体和气体中的声阻抗不同的原理来实现对气泡或液体的识别和检测。它具有体积小、重量轻、使用寿命长、检测灵敏度高、响应速度快等优点&#xff0c;广泛应用于医疗、化工、食品和环保等领域。 检测原理&#xff1a; 超声波气泡…

【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征

基于DEM/LUCC等数据统计得到各集水区流域特征 提取不同集水区各类土地利用类型比例步骤1&#xff1a;划分集水区为独立面单元步骤2&#xff1a;批量掩膜提取得到各集水区土地利用类型比例步骤3&#xff1a;导入各集水区LUCC数据并统计得到各类型占比 提取坡度特征流域面坡度河道…

【网络那些事】

【云计算】 云计算&#xff1a;把计算资源放在某个地方&#xff0c;并通过互联网暴露出来&#xff0c;让用户可以按需使用计算资源的方式&#xff0c;就是所谓的云计算 云计算的三种服务&#xff1a; 云平台专业名词 日常叫法 亚马逊云叫法 虚拟机 EC2 &#xff08;Elasti…

GPT润色指令

1. GPT润色指令 Below is a paragraph from an academic paper. Polish the writing to meet the academic style,improve the spelling, grammar, clarity, concision and overall readability. When necessary, rewrite the whole sentence. Paragraph &#xff1a;你的句子…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中&#xff0c;兰州交通大学可能并不显眼&#xff0c;似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而&#xff0c;在甘肃省的教育领域中&#xff0c;它无疑是一座璀璨的明珠&#xff0c;名列前茅…

Apache-Camel中的Quartz定时任务

需求&#xff1a;在camel的基础上增加两个定时任务&#xff0c;一个需要发邮件&#xff0c;一个只需要简单调用存储过程并拿回数据记录日志即可 package com.hkt.it.ds.dmg.eip.route;import java.util.List;import com.xxx.DmgCamelRouteConfig; import com.xxx.DmgCamelRout…

全面介绍HTML的语法!轻松写出网页

文章目录 heading(标题)paragraph(段落)link(超链接)imagemap(映射)table(表格)list(列表)layout(分块)form(表单)更多输入:datalistautocompleteautofocusmultiplenovalidatepatternplaceholderrequired head(首部)titlebaselinkstylemetascriptnoscript iframe HTML&#xff…

Java SpringBoot 获取 yml properties 自定义配置信息

Java SpringBoot 获取 yml properties 自定义配置信息 application.yml server:port: 9090servlet:context-path: /app第一种方法 HelloController package com.zhong.demo01.controller;import org.springframework.beans.factory.annotation.Value; import org.springfram…

NVM存储设备MTBF介绍

1. 概念 1.1. MTBF MTBF(Mean Time Between Failure)&#xff0c;平均故障间隔时间&#xff0c;也被称为平均无故障时间&#xff0c;是衡量一个产品的可靠性指标&#xff0c;其单位为小时。其定义为&#xff1a;产品在总的使用阶段累计工作时间与故障次数的比值&#xff1a; …