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

【学习总结|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));}
}

反射:深入类内部

反射的概念

  • 以编程方式解剖类的各种成分(成员变量、方法、构造器等)。
  • 学习获取类信息、操作类成分。

反射的步骤

  1. 获取 Class 对象:类名.classClass.forName()对象.getClass()
  2. 获取构造器:Constructor 对象,用于创建对象。
  3. 获取成员变量:Field 对象,用于赋值和取值。
  4. 获取成员方法: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高级技术

大家好&#xff0c;今天我们来聊聊 Java 中的几个高级技术&#xff1a;单元测试、反射、注解和动态代理。这些技术在源码、框架和架构师层面发挥着重要作用&#xff0c;掌握它们能让我们更深入地理解 Java 的底层原理&#xff0c;并提升代码质量和开发效率。 单元测试&#xf…...

java 对mongodb操作封装工具类

在 Java 中&#xff0c;封装 MongoDB 操作的工具类是非常常见的做法。使用 MongoDB 官方的 Java 驱动程序&#xff0c;结合常用的工具类封装&#xff0c;可以使得与 MongoDB 的交互更加方便和清晰。下面是一个简单的 MongoDB 操作封装工具类的示例代码。 前提 首先&#xff0…...

Spark-Streaming集成Kafka

Spark Streaming集成Kafka是生产上最多的方式&#xff0c;其中集成Kafka 0.10是较为简单的&#xff0c;即&#xff1a;Kafka分区和Spark分区之间是1:1的对应关系&#xff0c;以及对偏移量和元数据的访问。与高版本的Kafka Consumer API 集成时做了一些调整&#xff0c;下面我们…...

最大似然检测在通信解调中的应用

最大似然检测&#xff08;Maximum Likelihood Detection&#xff0c;MLD&#xff09;&#xff0c;也称为最大似然序列估计&#xff08;Maximum Likelihood Sequence Estimation&#xff0c;MLSE&#xff09;&#xff0c;是一种在通信系统中广泛应用的解调方法。其核心思想是在给…...

Bert各种变体——RoBERTA/ALBERT/DistillBert

RoBERTa 会重复一个语句10次&#xff0c;然后每次都mask不同的15%token。丢弃了NSP任务&#xff0c;论文指出NSP任务有时甚至会损害性能。使用了BPE ALBERT 1. 跨层参数共享 可以共享多头注意力层的参数&#xff0c;或者前馈网络层的参数&#xff0c;或者全部共享。 实验结果…...

力扣周赛T2-执行操作后不同元素的最大数量

给你一个整数数组 nums 和一个整数 k。 你可以对数组中的每个元素 最多 执行 一次 以下操作&#xff1a; 将一个在范围 [-k, k] 内的整数加到该元素上。 返回执行这些操作后&#xff0c;nums 中可能拥有的不同元素的 最大 数量。 示例 1&#xff1a; 输入&#xff1a; nums [1…...

uniapp 3分钟集成轮播广告图

先上效果图 顶部广告栏为 移动app常见需求&#xff0c;今天主要演示如何快速实现.这里还是基于 《星云erp-移动版》演示版 &#xff08;自行下载 导入 Hbuilder, 后端接口可以直接使用我演示接口&#xff0c;不需要修改&#xff09; 第一步: 组件选择 我们直接使用uni-swipe…...

图像修复和编辑大一统 | 腾讯北大等联合提出BrushEdit:BrushNet进阶版来了

文章链接&#xff1a;https://arxiv.org/pdf/2412.10316 项目链接&#xff1a;https://liyaowei-stu.github.io/project/BrushEdit 亮点直击 提出了BrushEdit&#xff0c;这是先前BrushNet模型的高级迭代版本。BrushEdit通过开创基于修复&#xff08;inpainting&#xff09;的图…...

极狐GitLab 17.7正式发布,可从 GitLab 丝滑迁移至极狐GitLab【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

Python基础知识回顾

数据类型 Python可以区分整数&#xff08;integers、下文简写为int&#xff09;、浮点数&#xff08;float&#xff09;、字符串&#xff08;string&#xff09;和布尔值&#xff08;Boolean&#xff09;等数据类型。 1&#xff09;int是可正可负的整数 2&#xff09;float包…...

SpringCloud2023集成Nacos2.4.3

基本都是最新版&#xff0c;踩了两天的坑终于集成上了&#xff0c;实现了多环境配置。 使用版本 关键应用版本备注Java21Oracle OpenJDK 21.0.5Spring Boot3.2.4Spring Cloud2023.0.1Spring Cloud Alibaba2023.0.1.3Nacos2.4.3单机模式 nacos安装 我学习过程使用的是windows…...

数势科技指标平台, 让数据产生最大价值

近来&#xff0c;指标体系和指标平台的重要性正被越来越多的业界同仁所认可。作为行业领先的数据智能产品提供商&#xff0c;数势科技最早推出了统一指标开发管理平台这一突破性产品&#xff08;2021年获得软著&#xff09;&#xff0c;并首家完成了中国信通院数据指标管理平台…...

【玩转MacBook】Maven安装

下载Maven 官网&#xff1a; https://maven.apache.org/download.cgi 下载 Zip 类型的压缩包&#xff1a; 配置环境变量 以管理员身份编辑配置文件。注意&#xff0c;由于 MacBook 上使用了 zsh 命令行&#xff0c;所以需要编辑~/.zshrc文件而不是~/.bash_profile文件&am…...

OpenGL笔记(1)

GLFW的函数说明 GLFW: Window guide 窗口创建提示 在创建窗口和上下文之前&#xff0c;可以设置多个提示。有些提示影响窗口本身&#xff0c;另一些则影响帧缓冲区或上下文。这些提示每次通过 glfwInit 初始化库时都会被重置为默认值。 整数值的提示可以通过 glfwWindowHint …...

前端Python应用指南(二)深入Flask:理解Flask的应用结构与模块化设计

《写给前端的python应用指南》系列&#xff1a; &#xff08;一&#xff09;快速构建 Web 服务器 - Flask vs Node.js 对比 书接上文&#xff0c;这一篇将会深入了解下Flask&#xff0c;这个轻量级的Web框架&#xff0c;非常适合用来构建小型应用和快速原型开发。但是&#x…...

前端Python应用指南(三)Django vs Flask:哪种框架适合构建你的下一个Web应用?

《写给前端的python应用指南》系列&#xff1a; &#xff08;一&#xff09;快速构建 Web 服务器 - Flask vs Node.js 对比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的应用结构与模块化设计 在上一篇博文中&#xff0c;我们深入探讨了Flask框架&#xff0c;…...

Unity3D Huatuo技术原理剖析详解

前言 在游戏开发领域&#xff0c;Unity3D凭借其强大的跨平台能力和丰富的功能&#xff0c;成为了众多开发者的首选工具。而在Unity3D的生态系统中&#xff0c;Huatuo作为一款重要的插件&#xff0c;为游戏开发带来了极大的便利。本文将深入剖析Huatuo的技术原理&#xff0c;并…...

复习打卡大数据篇——Hadoop HDFS 03

目录 1. HDFS元数据存储 2. HDFS HA 高可用 1. HDFS元数据存储 HDFS中的元数据按类型可以分为&#xff1a; 文件系统的元数据&#xff1a;包括文件名、目录名、修改信息、block的信息、副本信息等。datanodes的状态信息&#xff1a;比如节点状态、使用率等。 HDFS中的元数…...

宠物行业的出路:在爱与陪伴中寻找增长新机遇

在当下的消费市场中&#xff0c;如果说有什么领域能够逆势而上&#xff0c;宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时&#xff0c;宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员&#xff0c;更是情感的寄托和生活的调剂。然而&#xff0c;随着行业…...

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动

使用Turtle库实现&#xff0c;鼠标左键绘制路径&#xff0c;用鼠标右键结束绘制&#xff0c;小海龟并沿路径移动 Turtle库是Python标准库的一部分&#xff0c;它提供了一种基于命令的图形绘制方式。Turtle模块通过一个“海龟”&#xff08;Turtle&#xff09;对象在屏幕上移动…...

海格通信嵌入式面试题及参考答案

计算电路的最高工作频率如何计算? 计算电路的最高工作频率主要考虑电路中的关键路径延迟。关键路径是指在整个电路中,信号传播延迟最长的路径。电路的最高工作频率的倒数就是时钟周期,而时钟周期必须大于关键路径的延迟时间。 首先要确定电路中各个模块的延迟。比如对于组合…...

3D几何建模引擎Parasolid功能解析

一、什么是Parasolid&#xff1f; Parasolid是由Siemens PLM Software开发的高精度精密几何建模引擎。它全面评估CAD&#xff08;计算机辅助设计&#xff09;、CAM&#xff08;计算机辅助制造&#xff09;、CAE&#xff08;计算机辅助工程&#xff09;、PLM&#xff08;产品生…...

AI的进阶之路:从机器学习到深度学习的演变(四)

AI的进阶之路&#xff1a;从机器学习到深度学习的演变&#xff08;三&#xff09; 五、深度学习的应用领域 深度学习的应用领域广泛&#xff0c;涵盖了计算机视觉、自然语言处理、语音识别和推荐系统等多个方面。以下将详细探讨这些关键应用领域&#xff0c;展示深度学习在不同…...

【ES6复习笔记】rest参数(7)

什么是 rest 参数&#xff1f; rest 参数是 ES6 引入的一个特性&#xff0c;它允许我们将一个不定数量的参数表示为一个数组。使用 rest 参数可以更方便地处理函数的参数&#xff0c;尤其是在参数数量不确定的情况下。 如何使用 rest 参数&#xff1f; 在函数定义中&#xf…...

安装MongoDB,环境配置

官网下载地址&#xff1a;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地址&#xff1a; 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语言的同学应该都知道字节对齐。有些时候我们很容易弄错字节对齐的方式&#xff0c;特别是涉及到struct&#xff08;结构体&#xff09;和union&#xff08;联合体&#xff09;时。今天我们通过详细例子来说明下struct和union的对齐规则&#xff0c;以便了解各种struct和…...

虚拟机桥接模式网络连接不上解决方法

可能是桥接模式自动配置网络地址的时候没配好&#xff0c;自己手动配置一下。先看看windows里的wifi的ip 把虚拟机的网络设置打开ipv4把地址、子网掩码、网关输进去&#xff0c;然后再连接...

MySQL用表组织数据

用表组织数据 文章目录 用表组织数据一.四种完整性约束二.数值类型2-1三.数值类型2-2四.字符串.日期类型五.设置1.设置主键2.设置标识列3.设置非空4.设置默认值 六.主外键建立后注意事项 一.四种完整性约束 1.域完整性 列 域完整性约束方法:限制数据类型,检查约束,外键约束,默…...

基于python 微信小程序的医院就诊小程序

标题:基于 Python 微信小程序的医院就诊小程序 内容:1.摘要 基于 Python 微信小程序的医院就诊小程序旨在解决传统医院就诊流程繁琐、排队时间长等问题。通过小程序&#xff0c;患者可以在线预约挂号、查询医生信息、在线支付等&#xff0c;提高就诊效率。本小程序采用 Python…...

VUE3+django接口自动化部署平台部署说明文档(使用说明,需要私信)

网址连接&#xff1a;http://118.25.110.213:5200/#/login 账号/密码&#xff1a;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的全文索引用于搜索文本中的关键字&#xff0c;类似于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…...

人工智能学习框架入门教程(一)

人工智能&#xff08;AI&#xff09;学习框架是指为开发、训练和部署人工智能模型提供的结构化工具和环境。它们帮助开发者实现AI项目的高效性、可扩展性、可维护性&#xff0c;并提供了优化算法、模型训练、评估、调优等功能。根据任务的不同&#xff0c;人工智能框架可以分为…...

NNDL 作业11 LSTM

习题6-4 推导LSTM网络中参数的梯度&#xff0c; 并分析其避免梯度消失的效果 先来推个实例&#xff1a; 看式子中间&#xff0c;上半部分并未有连乘项&#xff0c;而下半部分有到的连乘项&#xff0c;从这可以看出&#xff0c;LSTM能缓解梯度消失&#xff0c;梯度爆炸只是不易…...

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 属性用于控制元素的显示类型&#xff0c;用的 display 值包括&#xff1a; block&#xff1a;块级元素 使元素成为块级元素&#xff0c;占据一整行&#xff0c;前后有换行宽度默认为父容器的 100%&#xff0c;可以设置宽高&#xff0c;支持 margin、padding、…...

python中使用selenium执行组合快捷键ctrl+v不生效问题

在执行ctrlv进行粘贴时&#xff0c;绑定一个页面上的元素对象&#xff08;无论元素对象是否是引用过期或者是粘贴的目标文本区&#xff0c;但前提需要粘贴的目标文本区获取焦点&#xff09;执行ctrlv后可以生效。执行粘贴组合快捷键&#xff08;ctrlv&#xff09;的示例代码 se…...

数据结构 C/C++(实验五:图)

&#xff08;大家好&#xff0c;今天分享的是数据结构的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 提要&#xff1a;实验题目 一、实验目的 二、实验内容及要求 三、源程序及注释 实验1代码 &#xff08;折半查…...

非零掩码矩阵邻接矩阵

文章目录 1. 举例&#xff1a;2. python 代码3. 邻接矩阵 1. 举例&#xff1a; 在深度学习过程中&#xff0c;我们经常会用到掩码矩阵&#xff0c;比如我们有一个矩阵A表示如下,希望得到矩阵B&#xff0c;在矩阵A的非零位置表示为1&#xff0c;零位置表示为0&#xff0c; A …...

Docker安装

目录 1. 联网安装 Docker 2. 离线安装 Docker 3. 安装 Docker Compose 4. 卸载 Docker 和 Docker Compose 1. 联网安装 Docker 在 CentOS 上通过 yum 安装 Docker&#xff1a; # 安装 Docker yum -y install docker # 启动 Docker systemctl start docker # 查看 D…...

嵌入式驱动开发详解21(网络驱动开发)

文章目录 前言以太网框架ENET 接口简介MAC接口MII \ RMII 接口MDIO 接口RJ45 接口 PHY芯片以太网驱动驱动挂载wifi模块挂载后续 前言 linux驱动主要是字符设备驱动、块设备驱动还有网络设备驱动、字符设备驱动在本专栏前面已经详细将解了&#xff0c;网络设备驱动本文会做简要…...

2024年12月25日Github流行趋势

项目名称&#xff1a;system-design-primer 项目维护者&#xff1a;donnemartin, cclauss, satob, fluency03, linhe0x0项目介绍&#xff1a;学习如何设计大规模系统。为系统设计面试做准备。包括 Anki 卡片。项目star数&#xff1a;282,387项目fork数&#xff1a;47,226 项目…...

6、mysql的MHA故障切换

MHA的含义 MHA&#xff1a;master high availability&#xff0c;建立在主从复制基础上的故障切换的软件系统。 主从复制的单点问题&#xff1a; 当主从复制当中&#xff0c;主服务器发生故障&#xff0c;会自动切换到一台从服务器&#xff0c;然后把从服务器升格成主&…...

#error: WinSock.h has already been included解决方案

原因&#xff1a; 在工程中使用了 Boot 库之后&#xff0c;使用了socket、tcp 相关的头文件&#xff0c;在其他地方还是包括了头文件<windows.h>&#xff0c;该头文件内包含了<winsock.h>。导致遇到报错问题&#xff1a;WinSock.h has already been included 解决…...

npm淘宝镜像

通过命令行配置npm的淘宝镜像源和官方镜像源&#xff0c;以及如何安装和使用cnpm来解决安装包卡顿或无法安装的问题。通过设置registry和disturl&#xff0c;配合清理缓存&#xff0c;可以优化npm的下载速度。 1、​官方默认镜像 npm config set registry https://registry.n…...

光谱相机的工作原理

光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异&#xff0c;以下是其具体工作过程&#xff1a; 一、光的收集 目标物体在光源照射下&#xff0c;其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统&#xff08;如透镜、反射镜…...

安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析

在信息技术迅猛发展的今天&#xff0c;企业运维管理领域正面临着前所未有的复杂挑战。统一运维管理平台作为集中管理和监控IT基础设施的核心工具&#xff0c;其安全性和效率至关重要。免密登录作为一种新兴的身份验证技术&#xff0c;正逐渐成为提升运维管理效率和安全性的重要…...

外包干了27天,技术退步明显。。。。。

时光荏苒&#xff0c;转眼我已是一个拥有近四年功能测试经验的大专生。20年&#xff0c;我满怀激情地通过校招进入湖南某知名软件公司&#xff0c;期待在这里开启我的职业生涯。然而&#xff0c;长时间的舒适环境让我渐渐失去了前进的动力&#xff0c;技术停滞不前&#xff0c;…...

leetcode 面试经典 150 题:合并两个有序数组

链接合并两个有序数组题序号88题型数组解题方法1. 双指针法 &#xff1b;2. 合并排序法难度简单熟练度✅✅✅✅✅ 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 …...