模拟 Junit 框架
需求
- 定义若干个方法,只要加了MyTest注解,就可以在启动时被触发执行
分析
- 定义一个自定义注解MyTest,只能注解方法,存活范围是一直都在
- 定义若干个方法,只要有@MyTest注解的方法就能在启动时被触发执行,没有这个注解的方法不能执行
package com.csdn.d8_annotation; import java.lang.annotation.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class AnnotationDemo4 {@MyTestpublic void test1() {System.out.println("======test1======");}public void test2() {System.out.println("======test2======");}@MyTestpublic void test3() {System.out.println("======test3======");}/*** 启动菜单:有注解的才被调用。* @param args*/public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {AnnotationDemo4 t = new AnnotationDemo4();//a.获取类对象Class<AnnotationDemo4> c = AnnotationDemo4.class;//b.提取全部方法Method[] method = c.getDeclaredMethods();//c.遍历方法,看是否有MyTest注解,有就跑它for (Method method1 : method) {if (method1.isAnnotationPresent(MyTest.class)) {method1.invoke(t);}}} }@Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @interface MyTest {} D:\Java\jdk-17\bin\java.exe ======test3====== ======test1======
简单的测试框架
- 当主方法执行后,会自动自行被检测的所有方法(加了Check注解的方法),判断方法是否有异常,记录到文件中
package com.csdn.annotation; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Method; /*** 简单的测试框架*/ public class TestCheck {public static void main(String[] args) throws IOException {/*Calculator calculator = new Calculator();Class<Calculator> clazz = Calculator.class;Method[] m = clazz.getDeclaredMethods();for (Method method : m) {if (method.isAnnotationPresent(Check.class)) {method.invoke(calculator);}} *///1、创建计算器对象Calculator cal = new Calculator();//2、获取字节码文件对象Class<Calculator> clazz = Calculator.class;//3、获取所有方法Method[] me = clazz.getDeclaredMethods();int number = 0;//出现异常的次数BufferedWriter bw = new BufferedWriter(new FileWriter("bug.txt"));for (Method method : me) {//4、判断方法上是否有Check注解if (method.isAnnotationPresent(Check.class)) {try {method.invoke(cal);} catch (Exception e) {//6、捕获异常//记录到文件中number++;bw.write(method.getName() + " 方法出异常了");bw.newLine();bw.write("异常的名称:" + e.getCause().getClass().getSimpleName());bw.newLine();bw.write("异常的原因:"+e.getCause().getMessage());bw.newLine();bw.write("--------------------------");bw.newLine();}}}bw.write("本次测试一共出现" + number + "次异常");bw.flush();bw.close();}} /*** 小明定义的计算器类*/ class Calculator {@Checkpublic void add() {String str = null;str.toString();System.out.println("1+0=" + (1 + 0));}@Checkpublic void sub() {System.out.println("1-0=" + (1 - 0));}@Checkpublic void mul() {System.out.println("1*0=" + (1 * 0));}@Checkpublic void div() {System.out.println("1/0=" + (1 / 0));}public void show() {System.out.println("永无bug...");} }@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @interface Check {} D:\Java\jdk-17\bin\java.exe 1-0=1 1*0=0
![]()
小结
- 以后大多数时候,我们会使用注解,而不是自定义注解
- 注解的作用:第一个给编译器用,第二个给解析程序用
- 注解不是程序的一部分,可以理解为注解就是一个标签
相关文章:
模拟 Junit 框架
需求 定义若干个方法,只要加了MyTest注解,就可以在启动时被触发执行 分析 定义一个自定义注解MyTest,只能注解方法,存活范围是一直都在定义若干个方法,只要有MyTest注解的方法就能在启动时被触发执行,没有这…...
瑞萨e2studio(27)----使用EZ-CUBE3烧录
瑞萨e2studio.27--使用EZ-CUBE3烧录 概述视频教学样品申请引脚配置EZ-CUBE3 仿真器开关设置对RA族MCU进行Flash编程蓝色 LED 指示灯的状态信息 概述 EZ-CUBE3(CYRCNEZCUBE03)是具有Flash存储器编程功能的片上调试仿真器,可以用于调试MCU程序…...
springBoot--web--函数式web
函数式web 前言场景给容器中放一个Bean:类型是 RouterFunction<ServerResponse>每个业务准备一个自己的handler使用集合的时候加注解请求的效果 前言 springmvc5.2 以后允许我们使用函数式的方式,定义web的请求处理流程 函数式接口 web请求处理的…...
react中hooks闭包
import React, { useState } from react;function Counter() {const [count, setCount] useState(0);return (<div><p>Count: {count}</p><button onClick{() > setCount(count 1)}>Increment</button></div>); }在上面的 React 组件…...
C++笔记之vector的初始化以及assign()方法
C笔记之vector的初始化以及assign()方法 —— 2023年4月15日 上海 code review 文章目录 C笔记之vector的初始化以及assign()方法代码——实践出真知0. 空的vector1. 花括号(initializer_list)——最推荐的初始化方法2. 花括号3. 圆括号花括号4. 圆括号5. 圆括号6. 指针花括号7…...
OSPF基础实验
一、实验拓扑 二、实验要求 1、按照图示配置 IP 地址 2、R1,R2,R3 运行 OSPF 使内网互通,所有接口(公网接口除外)全部宣告进 Area 0; 要求使用环回口作为 Router-id 3、业务网段不允许出现协议报文 4、R5 模拟互联网,内网通过…...
笔记本Charge与Vcore方案
一、笔记本Vcore方案 IMVP8/9:Intel Mobile Voltage Positionin VR12.5:就是指FIVR集成式调压模块(Haswell架构) PMIC:电源管理芯片(Power Management Integrated Circuits) 常见问题分析 1. 不开机,VCORE 短路 : 通常是因为Low side MOS短路造成.量测时可以先将MOS拿…...
error C2632: ‘char‘ followed by ‘char‘ is illegal
error C2632: char followed by char is illegal remove -stdc99...
MySql数据库实现注册登录及个人信息查询的数据库设计
前言: 数据库使用的是mysql 以下创建的表,实现以下功能: 用户1,账号admin,年龄20,关联3件商品 用户2,账号admin2,年龄30,关联2件商品(没有商品和用户1重复) 用户3,账号admin3,年龄50,关联2件商品(这两件商品均是用户1的其中两种) 登录查询对应数据的实现 1.创建用户表Users,并…...
C++-openssl-aes-cbc-pkcs5
PKCS#5填充是PKCS#7填充的一个子集,在PKCS#7填充时BlockSize为8的时候,PKCS#5与PKCS#7填充是一样的,在BlockSize不同时PKCS#5与PKCS#7填充是不同的。 PKCS#5填充是将数据填充到8的倍数, 填充后数据长度的计算公式: 定于…...
一个进程最多可以创建多少个线程基本分析
前言 话不多说,先来张脑图~ linux 虚拟内存知识回顾 虚拟内存空间长啥样 在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同位数的系统,地址空间的范围也不同。比如最常见的 32 位和 64 位系统&…...
Swin Transformer V2 Scaling Up Capacity and Resolution(CVPR2022)
文章目录 AbstractIntroduction不稳定性问题下游任务需要的高分辨率问题解决内存问题- Related WorksLanguage networks and scaling upVision networks and scaling upTransferring across window / kernel resolution Swin Transformer V2Swin Transformer简介Scaling Up Mod…...
rust学习——字符串、字符串字面量、切片(slice)、字符串 slice
文章目录 字符串、字符串字面量、切片(slice)、字符串 slice01、字符串02、字符串字面量03、切片 (slice)04、字符串 slice 字符串 slice注意要点String 与 &str 的转换字符串深度剖析字符串 slice 作为函数参数例子001例子00…...
SolidWorks模型导入到Gazebo中
首先建立好solidworks模型,然后另存为stl格式, 导出为STL文件时,文件名最好不要是中文,并且要将后缀STL改为stl,否则Gazebo无法识别 这是我创建好的机器人充电桩模型: 尺寸是单位是mm: 135mm …...
使用CMake构建一个简单的C++项目
文章目录 一. 构建一个简单的项目二. 构建过程1. 创建程序源文件2. 编写CMakeList.txt文件3. 构建项目并编译源代码 附件 一. 构建一个简单的项目 最基本的CMake项目是从单个源代码文件构建的可执行文件。对于像这样的简单项目,只需要一个包含三个命令的CMakeLists…...
图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例
文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引,初始值为…...
什么是卷积神经网络?解决了什么问题?
什么是卷积神经网络? 卷积神经网络(Convolutional Neural Network,CNN)是一种深度神经网络模型,主要用于图像识别、语音识别和自然语言处理等任务。它通过卷积层、池化层和全连接层来实现特征提取和分类。 解决了什么问…...
Golang数组:全面指南与实际示例
揭示Golang数组的威力:从基础到高级技巧 Golang数组是数据存储的基本构建块,为开发人员提供了多种可能性。在这篇正式的博客文章中,我们将探讨Golang数组,从基础知识到高级技巧。通过实际示例和正式的语气,我们将揭示…...
程序连接oracle查询数据的环境配置
连接oracle 数据库真麻烦,还是MySQL方便 Oracle Instant Client 这个东西的版本跟oracle的版本是有讲究的,引用文档的说明 Oracle 标准的客户端-服务器网络互操作性允许不同版本的 Oracle 客户端和 Oracle 数据库之间的连接。有关经过认证的配置&#…...
【BIGRU预测】基于双向门控循环单元的多变量时间序列预测(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
