反射 动态代理

news2024/11/23 12:26:20

目录

一、什么是反射?

二、获取class对象的三种方式​编辑

1、Class.forName("全类名");

2、类名.class

3、对象.getClass();

4、代码实现

三、反射获取

1、利用反射获取构造方法

①、示例代码:​编辑

②、获取所有的构造方法:​编辑

③、获取单个构造方法:

​编辑④、获取方法权限修饰符:

​编辑

​编辑⑤、获取参数个数、获取参数类型、获取所有参数:

​编辑

⑥、获取私有:(暴力反射)

2、利用发射获取成员变量​编辑

①、获取class字节码文件的对象​编辑

②、获取所有公共成员变量

​编辑③、获取所有成员变量

​编辑④、获取单个的成员变量

⑤、获取权限修饰符

​编辑⑥、获取成员变量的名字

​编辑⑦、获取成员变量的数据类型

​编辑⑧、获取成员变量记录的值

​编辑⑨、修改对象里面记录的值

​编辑3、利用反射获取成员方法

①、获取class字节码文件对象

​编辑②、获取里面所有的公共方法对象

③、获取里面所有的方法对象

​编辑④、获取单个的方法

​编辑⑤、获取方法的修饰符

​编辑⑥、获取方法的名字

​编辑⑦、获取方法的形参

​编辑⑧、获取方法的抛出的异常

​编辑⑨、方法运行

四、反射的作用​编辑

1、练习1:保存信息​编辑

2、练习2:跟配置文件结合动态创建​编辑

3、小结getClass()是定义在Object类中的,因此所有的对象都可以调用它

五、动态代理

​编辑1、什么是动态代理?动态代理可以无侵入式的给代码增加额外的功能

2、程序为什么需要代理?代理长什么样?

​编辑①、示例代码BigStar.java(JavaBean)

3、小结

​编辑4、如何为Java对象创建一个代理对象?

①、newProxyInstance(1,2,3)

​编辑②、示例代码:(创建一个代理)ProxyUtil.java

③、小结


一、什么是反射?

反射允许对封装类的字段,方法和构造函数的信息进行编程访问
换句话说就是(从类里拿出来)

可以获取到:(利用反射,我们可以获取到类中所有的东西)

获取是先从class字节码文件中获取的

二、获取class对象的三种方式


三种方式也对应了三种阶段

1、Class.forName("全类名");


全类名 = 包名+类名

2、类名.class


3、对象.getClass();


4、代码实现


三种方式获取到的字节码文件对象其实是一样的

三、反射获取


1、利用反射获取构造方法

 


①、示例代码:


②、获取所有的构造方法:


③、获取单个构造方法:


④、获取方法权限修饰符:


⑤、获取参数个数、获取参数类型、获取所有参数:

 


⑥、获取私有:(暴力反射)


2、利用发射获取成员变量


①、获取class字节码文件的对象


②、获取所有公共成员变量


③、获取所有成员变量


④、获取单个的成员变量

⑤、获取权限修饰符


⑥、获取成员变量的名字


⑦、获取成员变量的数据类型


⑧、获取成员变量记录的值


⑨、修改对象里面记录的值


3、利用反射获取成员方法


①、获取class字节码文件对象


②、获取里面所有的公共方法对象


包含父类中所有的公共方法

③、获取里面所有的方法对象


④、获取单个的方法


⑤、获取方法的修饰符


⑥、获取方法的名字


⑦、获取方法的形参


⑧、获取方法的抛出的异常


⑨、方法运行


四、反射的作用


1、练习1:保存信息


示例代码:

完整代码:(创建IO流存入本地文件)

2、练习2:跟配置文件结合动态创建


示例代码:

(配置文件 prop.properties)

反射和配置文件结合,动态创建对象

老师:

 

 

3、小结
getClass()是定义在Object类中的,因此所有的对象都可以调用它

五、动态代理


1、什么是动态代理?
动态代理可以无侵入式的给代码增加额外的功能

2、程序为什么需要代理?代理长什么样?


①、示例代码
BigStar.java(JavaBean)

Star.java(接口)

3、小结


4、如何为Java对象创建一个代理对象?


①、newProxyInstance(1,2,3)


②、示例代码:(创建一个代理)
ProxyUtil.java

参数一:固定格式

参数二:指定数组,如果有多个接口,可以将多个接口都放入数组

参数三:匿名内部类

测试类:

JavaBean(BigStar)

③、小结

1Java提供了什么API帮我们创建代理?
newProxyInstance(1,2,3)
newIProxyInstance方法在创建代理时,需要接几个参数,每个参数的含义是什么?
三个参数,参数1:用于指定用哪个类加载器
参数3: 用来指定生成的代理
参数2: 指定接口:
对象要干什么事情


通过invokehandler的invoke方法指定代理干的事时,这个invoke会被谁调用? 要接哪几个参数?
bigstar, argsll
 

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

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

相关文章

SICTF round#3 web

1.100&#xff05;_upload url可以进行文件包含&#xff0c;但是flag被过滤 看一下源码 <?phpif(isset($_FILES[upfile])){$uploaddir uploads/;$uploadfile $uploaddir . basename($_FILES[upfile][name]);$ext pathinfo($_FILES[upfile][name],PATHINFO_EXTENSION);$t…

vue的十大面试题详情

1 v-show与v-if区别 v-if与v-show可以根据条件的结果,来决定是否显示指定内容&#xff1a; v-if: 条件不满足时, 元素不会存在. v-show: 条件不满足时, 元素不会显示(但仍然存在). <div id"app"><button click"show !show">点我</but…

vue3+ant design 4.x版本遇见message不显示问题。

自己打断点到success&#xff0c;但是就是没有全局显示。 第一看自己的全局引入是否有问题&#xff1a; import { createApp } from vue; import ./style.css; import App from ./App.vue; import Antd from ant-design-vue; import ant-design-vue/dist/reset.css; import ro…

K8s进阶之路-命名空间级-服务发现 :

服务发现&#xff1a; Service&#xff08;东西流量&#xff09;&#xff1a;集群内网络通信、负载均衡&#xff08;四层负载&#xff09;内部跨节点&#xff0c;节点与节点之间的通信&#xff0c;以及pod与pod之间的通信&#xff0c;用Service暴露端口即可实现 Ingress&#…

Top 8 免费 iOS 系统恢复软件榜单

智能手机彻底改变了我们在日常生活中执行任务的方式。这种紧凑的设备结合了移动电话和计算功能。这些移动设备具有出色的功能&#xff0c;例如更强大的硬件潜力和广泛的移动操作流程。此外&#xff0c;无线连接和互联网连接的发展使得这种袖珍设备在全球范围内受到需求。iPhone…

【动态规划专栏】专题一:斐波那契数列模型--------1.第N个泰波那契数

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径 解法0 迭代法解法1 深度优先 前序解法2 深度优先 前序 添加了StringBulider ---------------&#x1f388;&#x1f388;257. 二叉树的所有路径 题目链接&#x1f388;&#x1f388;------------------- 解法0 迭代法…

从零开始学逆向:理解ret2libc-3

1.题目信息 题目下载链接&#xff1a;https://pan.baidu.com/s/1wk3JFQBHgVZ0vjfnQk60Ug 提取码&#xff1a;0000 2.解题分析 相对于前面两道例题难度加大了不少&#xff0c;程序中既没有system函数的地址&#xff0c;也没有/bin/sh字符串&#xff0c;我们需要使用libc中的s…

Aspose.Words For JAVA 动态制作多维度表格(涵2024最新无水印包)

全网最全Aspose.Words For JAVA 高级使用教程: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/133989664?spm1000.2115.3001.5352 运行截图&#xff1a; 所谓多维度表格通常包含多个维度, 每个维度都代表一种数据属性,多维度表格可以用于数据分析&#xff0c;通过不同的维…

(十四)devops持续集成开发——jenkins流水线使用pipeline方式发布项目

前言 本节内容我们使用另外一种方式pipeline实现项目的流水线部署发布&#xff0c;Jenkins Pipeline是一种允许以代码方式定义持续集成和持续交付流水线的工具。通过Jenkins Pipeline&#xff0c;可以将整个项目的构建、测试和部署过程以脚本的形式写入Jenkinsfile中&#xff…

给label-studio 配置sam(segment anything)ml 记录

给label-studio 配置sam&#xff08;segment anything&#xff09;ml 后端记录 配置ml后台下载代码下载模型文件创建环境模型转换后端服务启动 配置label-studio 前端配置模型后端连接配置标注模板标注界面使用 参考链接 配置ml后台 下载代码 git clone https://github.com/H…

qt for python创建UI界面

现在很多库都有用到python,又想使用QT creater创作界面&#xff0c;来使用。 1.使用的版本 使用虚拟机安装Ubuntu22.04&#xff0c;Ubuntu使用命令行安装qt,默认安装的是QT5&#xff0c;不用来回调了&#xff0c;就用系统默认的吧&#xff0c;不然安装工具都要费不少事情。pyt…

展示用HTML编写的个人简历信息

展示用HTML编写的个人简历信息 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document…

【前端素材】几款实用的后台管理系统html模板(附带源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

政安晨:【完全零基础】认知人工智能(五)【超级简单】的【机器学习神经网络】 —— 数据训练

回顾 作为这个系列文章的最后一篇&#xff0c;咱们先回顾一下建立神经网络的整体步骤&#xff0c;以实现对机器学习神经网络的整体认知&#xff1a; 在人工智能领域中&#xff0c;机器学习神经网络的数据训练部分是指通过将大量的输入数据输入到神经网络中&#xff0c;利用反…

如何在IDEA中使用固定公网地址SSH远程连接服务器开发环境

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

前言 Vue 是前端开发中非常常见的一种框架&#xff0c;它的易用性和灵活性使得它成为了很多开发者的首选。而在 Vue2 版本中&#xff0c;组件的开发也变得非常简单&#xff0c;但随着 Vue3 版本的发布&#xff0c;组件开发有了更多的特性和优化&#xff0c;为我们的业务开发带…

IDEA报错:无法自动装配。找不到 ... 类型的 Bean。

今天怎么遇见这么多问题。 注&#xff1a;似乎只有在老版本的IDEA中这个报错是红线&#xff0c;新版的IDEA就不是红线了&#xff08;21.2.2是红的&#xff09; 虽然会报错无法自动装配&#xff0c;但启动后仍能正常执行 不嫌麻烦的解决做法&#xff1a;Autowired的参数reques…

Uniapp-开发小程序

文章目录 前言一、npm run xxx —— cross-env: Permission denied解决方法&#xff08;亲测有效&#xff09;其他解决方法&#xff1a; 二、macOS 微信开发者工具选择uniapp 用 vscode 开发 总结 前言 macOS下 uniapp 开发小程序。 一、npm run xxx —— cross-env: Permissi…

对比不同Layer输出,在解码阶段消除大模型幻觉

实现方式 对比最后一层出来的logit&#xff0c;和前面Layer出来的logit&#xff0c;消除差异过大的分布&#xff0c;从而降低幻觉&#xff1a; 最后一层Layer出来的logit容易的得到&#xff1b; 选择与最后一层的logit最不相似的分布的那层结果 实现原理 也是很简单的对比…