【学习总结|DAY023】Java高级技术
大家好,今天我们来聊聊 Java 中的几个高级技术:单元测试、反射、注解和动态代理。这些技术在源码、框架和架构师层面发挥着重要作用,掌握它们能让我们更深入地理解 Java 的底层原理,并提升代码质量和开发效率。
单元测试:保证代码质量
传统单元测试的痛点:
- 依赖
main
方法,无法自动化测试。 - 测试结果需要手动分析,效率低下。
- 一个方法测试失败可能影响其他方法。
JUnit 单元测试框架:
- 优点: 灵活、自动化、生成测试报告。
- 使用步骤: 导入 JUnit 框架,定义测试类和测试方法,使用
@Test
注解标记测试方法,运行测试。
代码案例:
import org.junit.Test;
import static org.junit.Assert.*;public class CalculatorTest {@Testpublic void testAdd() {assertEquals(5, Calculator.add(2, 3));}@Testpublic void testSubtract() {assertEquals(1, Calculator.subtract(3, 2));}
}
反射:深入类内部
反射的概念:
- 以编程方式解剖类的各种成分(成员变量、方法、构造器等)。
- 学习获取类信息、操作类成分。
反射的步骤:
- 获取
Class
对象:类名.class
、Class.forName()
、对象.getClass()
。 - 获取构造器:
Constructor
对象,用于创建对象。 - 获取成员变量:
Field
对象,用于赋值和取值。 - 获取成员方法:
Method
对象,用于执行方法。
反射的作用:
- 运行时获取类信息,操作类成分。
- 破坏封装性,绕过泛型约束。
- 构建 Java 框架,实现通用功能。
代码案例:
public class ReflectionTest {public static void main(String[] args) throws Exception {Class<?> clazz = Class.forName("Student");Constructor<?> constructor = clazz.getConstructor(String.class, int.class, char.class, double.class, String.class);Object obj = constructor.newInstance("张三", 18, '男', 180.0, "篮球");Method method = clazz.getMethod("getName");String name = (String) method.invoke(obj);System.out.println(name);}
}
注解:为代码添加元数据
注解的概念:
- Java 代码中的特殊标记,用于为类、方法、成员变量等添加元数据。
- 例如:
@Override
、@Test
等。
自定义注解:
@interface
关键字定义注解。- 可以定义属性,例如:
String value()
。 - 可以使用元注解
@Target
和@Retention
限制注解的使用范围和存活周期。
注解的解析:
- 使用
AnnotatedElement
接口提供的方法,例如:getDeclaredAnnotations()
、getDeclaredAnnotation()
、isAnnotationPresent()
。
代码案例:
import java.lang.annotation.*;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyTest {String value();
}public class AnnotationTest {@MyTest("这是一个测试方法")public void testMethod() {System.out.println("执行测试方法");}
}
动态代理:增强对象功能
代理的概念:
- 为对象创建代理对象,代理对象可以增强原对象的功能。
- 例如:添加日志记录、权限控制等。
Java 动态代理:
java.lang.reflect.Proxy
类提供newProxyInstance()
方法创建代理对象。- 需要指定类加载器、接口和
InvocationHandler
对象。 InvocationHandler
对象的invoke()
方法用于指定代理对象的行为。
代码案例:
public interface Star {void sing();void dance();
}public class StarProxy implements InvocationHandler {private Object target;public StarProxy(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("准备话筒,收钱");Object result = method.invoke(target, args);System.out.println("谢谢观赏,再见");return result;}
}public class ProxyTest {public static void main(String[] args) {Star zhangsan = new ZhangSan();Star proxyStar = (Star) Proxy.newProxyInstance(ZhangSan.class.getClassLoader(),ZhangSan.class.getInterfaces(),new StarProxy(zhangsan));proxyStar.sing();proxyStar.dance();}
}
总结
单元测试、反射、注解和动态代理是 Java 中的高级技术,它们在保证代码质量、深入理解类、为代码添加元数据和增强对象功能方面发挥着重要作用。掌握这些技术,能让我们更深入地理解 Java 的底层原理,并提升代码质量和开发效率。
相关文章:
【学习总结|DAY023】Java高级技术
大家好,今天我们来聊聊 Java 中的几个高级技术:单元测试、反射、注解和动态代理。这些技术在源码、框架和架构师层面发挥着重要作用,掌握它们能让我们更深入地理解 Java 的底层原理,并提升代码质量和开发效率。 单元测试…...
java 对mongodb操作封装工具类
在 Java 中,封装 MongoDB 操作的工具类是非常常见的做法。使用 MongoDB 官方的 Java 驱动程序,结合常用的工具类封装,可以使得与 MongoDB 的交互更加方便和清晰。下面是一个简单的 MongoDB 操作封装工具类的示例代码。 前提 首先࿰…...
Spark-Streaming集成Kafka
Spark Streaming集成Kafka是生产上最多的方式,其中集成Kafka 0.10是较为简单的,即:Kafka分区和Spark分区之间是1:1的对应关系,以及对偏移量和元数据的访问。与高版本的Kafka Consumer API 集成时做了一些调整,下面我们…...
最大似然检测在通信解调中的应用
最大似然检测(Maximum Likelihood Detection,MLD),也称为最大似然序列估计(Maximum Likelihood Sequence Estimation,MLSE),是一种在通信系统中广泛应用的解调方法。其核心思想是在给…...
Bert各种变体——RoBERTA/ALBERT/DistillBert
RoBERTa 会重复一个语句10次,然后每次都mask不同的15%token。丢弃了NSP任务,论文指出NSP任务有时甚至会损害性能。使用了BPE ALBERT 1. 跨层参数共享 可以共享多头注意力层的参数,或者前馈网络层的参数,或者全部共享。 实验结果…...
力扣周赛T2-执行操作后不同元素的最大数量
给你一个整数数组 nums 和一个整数 k。 你可以对数组中的每个元素 最多 执行 一次 以下操作: 将一个在范围 [-k, k] 内的整数加到该元素上。 返回执行这些操作后,nums 中可能拥有的不同元素的 最大 数量。 示例 1: 输入: nums [1…...
uniapp 3分钟集成轮播广告图
先上效果图 顶部广告栏为 移动app常见需求,今天主要演示如何快速实现.这里还是基于 《星云erp-移动版》演示版 (自行下载 导入 Hbuilder, 后端接口可以直接使用我演示接口,不需要修改) 第一步: 组件选择 我们直接使用uni-swipe…...
图像修复和编辑大一统 | 腾讯北大等联合提出BrushEdit:BrushNet进阶版来了
文章链接:https://arxiv.org/pdf/2412.10316 项目链接:https://liyaowei-stu.github.io/project/BrushEdit 亮点直击 提出了BrushEdit,这是先前BrushNet模型的高级迭代版本。BrushEdit通过开创基于修复(inpainting)的图…...
极狐GitLab 17.7正式发布,可从 GitLab 丝滑迁移至极狐GitLab【二】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
Python基础知识回顾
数据类型 Python可以区分整数(integers、下文简写为int)、浮点数(float)、字符串(string)和布尔值(Boolean)等数据类型。 1)int是可正可负的整数 2)float包…...
SpringCloud2023集成Nacos2.4.3
基本都是最新版,踩了两天的坑终于集成上了,实现了多环境配置。 使用版本 关键应用版本备注Java21Oracle OpenJDK 21.0.5Spring Boot3.2.4Spring Cloud2023.0.1Spring Cloud Alibaba2023.0.1.3Nacos2.4.3单机模式 nacos安装 我学习过程使用的是windows…...
数势科技指标平台, 让数据产生最大价值
近来,指标体系和指标平台的重要性正被越来越多的业界同仁所认可。作为行业领先的数据智能产品提供商,数势科技最早推出了统一指标开发管理平台这一突破性产品(2021年获得软著),并首家完成了中国信通院数据指标管理平台…...
【玩转MacBook】Maven安装
下载Maven 官网: https://maven.apache.org/download.cgi 下载 Zip 类型的压缩包: 配置环境变量 以管理员身份编辑配置文件。注意,由于 MacBook 上使用了 zsh 命令行,所以需要编辑~/.zshrc文件而不是~/.bash_profile文件&am…...
OpenGL笔记(1)
GLFW的函数说明 GLFW: Window guide 窗口创建提示 在创建窗口和上下文之前,可以设置多个提示。有些提示影响窗口本身,另一些则影响帧缓冲区或上下文。这些提示每次通过 glfwInit 初始化库时都会被重置为默认值。 整数值的提示可以通过 glfwWindowHint …...
前端Python应用指南(二)深入Flask:理解Flask的应用结构与模块化设计
《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比 书接上文,这一篇将会深入了解下Flask,这个轻量级的Web框架,非常适合用来构建小型应用和快速原型开发。但是&#x…...
前端Python应用指南(三)Django vs Flask:哪种框架适合构建你的下一个Web应用?
《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比(二)深入Flask:理解Flask的应用结构与模块化设计 在上一篇博文中,我们深入探讨了Flask框架,…...
Unity3D Huatuo技术原理剖析详解
前言 在游戏开发领域,Unity3D凭借其强大的跨平台能力和丰富的功能,成为了众多开发者的首选工具。而在Unity3D的生态系统中,Huatuo作为一款重要的插件,为游戏开发带来了极大的便利。本文将深入剖析Huatuo的技术原理,并…...
复习打卡大数据篇——Hadoop HDFS 03
目录 1. HDFS元数据存储 2. HDFS HA 高可用 1. HDFS元数据存储 HDFS中的元数据按类型可以分为: 文件系统的元数据:包括文件名、目录名、修改信息、block的信息、副本信息等。datanodes的状态信息:比如节点状态、使用率等。 HDFS中的元数…...
宠物行业的出路:在爱与陪伴中寻找增长新机遇
在当下的消费市场中,如果说有什么领域能够逆势而上,宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时,宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员,更是情感的寄托和生活的调剂。然而,随着行业…...
使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动
使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动 Turtle库是Python标准库的一部分,它提供了一种基于命令的图形绘制方式。Turtle模块通过一个“海龟”(Turtle)对象在屏幕上移动…...
海格通信嵌入式面试题及参考答案
计算电路的最高工作频率如何计算? 计算电路的最高工作频率主要考虑电路中的关键路径延迟。关键路径是指在整个电路中,信号传播延迟最长的路径。电路的最高工作频率的倒数就是时钟周期,而时钟周期必须大于关键路径的延迟时间。 首先要确定电路中各个模块的延迟。比如对于组合…...
3D几何建模引擎Parasolid功能解析
一、什么是Parasolid? Parasolid是由Siemens PLM Software开发的高精度精密几何建模引擎。它全面评估CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAE(计算机辅助工程)、PLM(产品生…...
AI的进阶之路:从机器学习到深度学习的演变(四)
AI的进阶之路:从机器学习到深度学习的演变(三) 五、深度学习的应用领域 深度学习的应用领域广泛,涵盖了计算机视觉、自然语言处理、语音识别和推荐系统等多个方面。以下将详细探讨这些关键应用领域,展示深度学习在不同…...
【ES6复习笔记】rest参数(7)
什么是 rest 参数? rest 参数是 ES6 引入的一个特性,它允许我们将一个不定数量的参数表示为一个数组。使用 rest 参数可以更方便地处理函数的参数,尤其是在参数数量不确定的情况下。 如何使用 rest 参数? 在函数定义中…...
安装MongoDB,环境配置
官网下载地址:MongoDB Shell Download | MongoDB 选择版本 安装 下载完成双击打开 点击mongodb-windows-x86_64-8.0.0-signed 选择安装地址 检查安装地址 安装成功 二.配置MongoDB数据库环境 1.找到安装好MongoDB的bin路径 复制bin路径 打开此电脑 -> 打开高级…...
ubuntu 网络管理
1 查看ip地址 rootu22-tools-20:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever…...
flask后端开发(1):第一个Flask项目
目录 一、Helloworddebug、host、port的配置 gitcode地址: https://gitcode.com/qq_43920838/flask_project.git 一、Helloword 一般是会创建两个文件夹和app.py app.py from flask import FlaskappFlask(__name__)app.route(/) def hello_world():return Hello…...
详解下c语言中struct和union的对齐规则
接触过c语言的同学应该都知道字节对齐。有些时候我们很容易弄错字节对齐的方式,特别是涉及到struct(结构体)和union(联合体)时。今天我们通过详细例子来说明下struct和union的对齐规则,以便了解各种struct和…...
虚拟机桥接模式网络连接不上解决方法
可能是桥接模式自动配置网络地址的时候没配好,自己手动配置一下。先看看windows里的wifi的ip 把虚拟机的网络设置打开ipv4把地址、子网掩码、网关输进去,然后再连接...
MySQL用表组织数据
用表组织数据 文章目录 用表组织数据一.四种完整性约束二.数值类型2-1三.数值类型2-2四.字符串.日期类型五.设置1.设置主键2.设置标识列3.设置非空4.设置默认值 六.主外键建立后注意事项 一.四种完整性约束 1.域完整性 列 域完整性约束方法:限制数据类型,检查约束,外键约束,默…...
基于python 微信小程序的医院就诊小程序
标题:基于 Python 微信小程序的医院就诊小程序 内容:1.摘要 基于 Python 微信小程序的医院就诊小程序旨在解决传统医院就诊流程繁琐、排队时间长等问题。通过小程序,患者可以在线预约挂号、查询医生信息、在线支付等,提高就诊效率。本小程序采用 Python…...
VUE3+django接口自动化部署平台部署说明文档(使用说明,需要私信)
网址连接:http://118.25.110.213:5200/#/login 账号/密码:renxiaoyong 1、VUE3部署本地。 1.1本地安装部署node.js 1.2安装vue脚手架 npm install -g vue/cli # 或者 yarn global add vue/cli1.3创建本地项目 vue create my-vue-project1.4安装依赖和插…...
【MySQL】十三,关于MySQL的全文索引
MySQL的全文索引用于搜索文本中的关键字,类似于like查询。 演示 建表 CREATE TABLE demo (id INT(11) NOT NULL,name CHAR(30) NOT NULL,age INT(11) NOT NULL,info VARCHAR(255),primary key(id),fulltext index futxt_idx_info(info) );此表的默认存储引擎为In…...
人工智能学习框架入门教程(一)
人工智能(AI)学习框架是指为开发、训练和部署人工智能模型提供的结构化工具和环境。它们帮助开发者实现AI项目的高效性、可扩展性、可维护性,并提供了优化算法、模型训练、评估、调优等功能。根据任务的不同,人工智能框架可以分为…...
NNDL 作业11 LSTM
习题6-4 推导LSTM网络中参数的梯度, 并分析其避免梯度消失的效果 先来推个实例: 看式子中间,上半部分并未有连乘项,而下半部分有到的连乘项,从这可以看出,LSTM能缓解梯度消失,梯度爆炸只是不易…...
Git 操作全解:从基础命令到高级操作的实用指南
文章目录 1.基本命令1.初始化仓库2.克隆远程仓库3.查看当前仓库状态4.查看提交日志5.添加文件到暂存区6.提交更改7.查看仓库的配置信息 2.分支操作1.查看所有分支2.创建新分支3.切换名称4.创建并切换到新分支5.删除分支6.查看当前分支 3.合并分支1.合并分支2.解决合并冲突 4.远…...
CSS(四)display和float
display display 属性用于控制元素的显示类型,用的 display 值包括: block:块级元素 使元素成为块级元素,占据一整行,前后有换行宽度默认为父容器的 100%,可以设置宽高,支持 margin、padding、…...
python中使用selenium执行组合快捷键ctrl+v不生效问题
在执行ctrlv进行粘贴时,绑定一个页面上的元素对象(无论元素对象是否是引用过期或者是粘贴的目标文本区,但前提需要粘贴的目标文本区获取焦点)执行ctrlv后可以生效。执行粘贴组合快捷键(ctrlv)的示例代码 se…...
数据结构 C/C++(实验五:图)
(大家好,今天分享的是数据结构的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 提要:实验题目 一、实验目的 二、实验内容及要求 三、源程序及注释 实验1代码 (折半查…...
非零掩码矩阵邻接矩阵
文章目录 1. 举例:2. python 代码3. 邻接矩阵 1. 举例: 在深度学习过程中,我们经常会用到掩码矩阵,比如我们有一个矩阵A表示如下,希望得到矩阵B,在矩阵A的非零位置表示为1,零位置表示为0, A …...
Docker安装
目录 1. 联网安装 Docker 2. 离线安装 Docker 3. 安装 Docker Compose 4. 卸载 Docker 和 Docker Compose 1. 联网安装 Docker 在 CentOS 上通过 yum 安装 Docker: # 安装 Docker yum -y install docker # 启动 Docker systemctl start docker # 查看 D…...
嵌入式驱动开发详解21(网络驱动开发)
文章目录 前言以太网框架ENET 接口简介MAC接口MII \ RMII 接口MDIO 接口RJ45 接口 PHY芯片以太网驱动驱动挂载wifi模块挂载后续 前言 linux驱动主要是字符设备驱动、块设备驱动还有网络设备驱动、字符设备驱动在本专栏前面已经详细将解了,网络设备驱动本文会做简要…...
2024年12月25日Github流行趋势
项目名称:system-design-primer 项目维护者:donnemartin, cclauss, satob, fluency03, linhe0x0项目介绍:学习如何设计大规模系统。为系统设计面试做准备。包括 Anki 卡片。项目star数:282,387项目fork数:47,226 项目…...
6、mysql的MHA故障切换
MHA的含义 MHA:master high availability,建立在主从复制基础上的故障切换的软件系统。 主从复制的单点问题: 当主从复制当中,主服务器发生故障,会自动切换到一台从服务器,然后把从服务器升格成主&…...
#error: WinSock.h has already been included解决方案
原因: 在工程中使用了 Boot 库之后,使用了socket、tcp 相关的头文件,在其他地方还是包括了头文件<windows.h>,该头文件内包含了<winsock.h>。导致遇到报错问题:WinSock.h has already been included 解决…...
npm淘宝镜像
通过命令行配置npm的淘宝镜像源和官方镜像源,以及如何安装和使用cnpm来解决安装包卡顿或无法安装的问题。通过设置registry和disturl,配合清理缓存,可以优化npm的下载速度。 1、官方默认镜像 npm config set registry https://registry.n…...
光谱相机的工作原理
光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异,以下是其具体工作过程: 一、光的收集 目标物体在光源照射下,其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统(如透镜、反射镜…...
安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析
在信息技术迅猛发展的今天,企业运维管理领域正面临着前所未有的复杂挑战。统一运维管理平台作为集中管理和监控IT基础设施的核心工具,其安全性和效率至关重要。免密登录作为一种新兴的身份验证技术,正逐渐成为提升运维管理效率和安全性的重要…...
外包干了27天,技术退步明显。。。。。
时光荏苒,转眼我已是一个拥有近四年功能测试经验的大专生。20年,我满怀激情地通过校招进入湖南某知名软件公司,期待在这里开启我的职业生涯。然而,长时间的舒适环境让我渐渐失去了前进的动力,技术停滞不前,…...
leetcode 面试经典 150 题:合并两个有序数组
链接合并两个有序数组题序号88题型数组解题方法1. 双指针法 ;2. 合并排序法难度简单熟练度✅✅✅✅✅ 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 …...