Java基础进阶03-注解和单元测试

news2025/1/11 5:54:45

目录

一、注解

1.概述

2.作用

3.自定义注解

(1)格式

(2)使用

(3)练习

4.元注解

(1)概述

(2)常见元注解

(3)@Target

(4)@Retention

二、单元测试

1.概述

2.单元测试工具JUnit

3.JUnit特点

4.JUnit的使用

5.JUnit常用注解


一、注解

1.概述

注解是代码里的特殊标记,程序可以读取注解,一般用于替代配置文件

开发人员可以通过注解告诉类如何运行: 在Java技术里注解的典型应用:可以通过反射技术去得到类里面的注解,来决定怎么去运行类

2.作用

  • 标记(如重写@Override)

  • 约束并检查代码是否符合要求(如重写,代码有问题无法实现重写效果的话会报错)

  • 压制警告信息(如@SuppressWarnings(value = “all”)【表示压制所有的警告】)

  • 声明(如@Deprecated,表示过时)

3.自定义注解

(1)格式
  public @interface 注解名称{
      //属性类型:基本数据类型,String,Class,注解,枚举,以上类型的一维数组
      //特殊属性值Value,我们在使用注解的时候,如果我们只给注解的value属性赋值,那么value=可省略
        public 属性类型 属性名() default 默认值
    }
public @interface text{
    public String[] STRINGS() ;
}
public @interface text02{
    public String[] value();
}
(2)使用
//直接在要使用的位置上@注解名即可
//注意:在使用注解的时候如果注解里面的属性没有指定默认值,那么我们就需要手动给出注解属性的设置值。
@text(STRINGS = {"1","2","3"})
public static void main(String[] args) {
​
}

@text02({"1","2","3"})
public static void main(String[] args) {
​
}
 

(3)练习

自定义一个注解(@随意),用于指定类的方法上,如果某一个类的方法上使用了该注解,就执行该方法

注解:

//表示这个注解的存活时间
@Retention(value = RetentionPolicy.RUNTIME)
@interface sign{
    public String value();
}

方法类:

public class Methods {
    void method01() {
        System.out.println("方法一运行了");
    }
    @sign("true")
    void method02() {
        System.out.println("方法二运行了");
    }
​
    void method03() {
        System.out.println("方法三运行了");
    }
    @sign("true")
    void method04() {
        System.out.println("方法四运行了");
    }
    @sign("true")
    void method05() {
        System.out.println("方法五运行了");
    }
}

测试类:

public class NoteDemo {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        //1.通过反射获取Methods类的字节码文件
        Class<Methods> methodsClass = Methods.class;
        //1.1通过无参构造创建对象
        Methods methods1 = methodsClass.getDeclaredConstructor().newInstance();
        //2.获取所有方法对象
        Method[] methods = methodsClass.getDeclaredMethods();
        //3.遍历方法
        for (Method method : methods) {
            //判断是否有注解,参数是注解的字节码文件
            //isAnnotationPresent(类<? extends Annotation> annotationClass)
            if (method.isAnnotationPresent(sign.class)) {
                method.invoke(methods1);
            }
        }
​
    }
}

4.元注解

(1)概述

描述元注解的注解(写在注解上面的注解)

(2)常见元注解
元注解名说明
@Target指定了注解能在哪里使用(成员变量,类,方法)
@Retention注解保留时间(声明周期)【不写默认是源码阶段】
@Inherited表示修饰的自定义注解可以被子类继承
@Documented表示该自定义注解,会出现在API文档里面

(3)@Target
  • 成员变量:

@Target({ElementType.FIELD})
@interface sign{
    public String value();
}
  • 类:

@Target({ElementType.TYPE})
@interface sign{
    public String value();
}
  • 方法

@Target({ElementType.METHOD})
@interface sign{
    public String value();
}

如果是多个参数,用,隔开

(4)@Retention
  • 源码阶段(默认):注释只在java文件中生效,java文件编译变为class文件后,注解会消失

  • 运行时阶段:java文件编译变为class文件后,注解不会消失

@Retention(value = RetentionPolicy.RUNTIME)
@interface sign{
    public String value();
}

二、单元测试

1.概述

单元测试是对单个代码模块的正确性的测试

2.单元测试工具JUnit

JUnit是一个Java编程语言的单元测试工具。JUnit是一个非常重要的测试工具。

3.JUnit特点

  • JUnit是一个开放源代码的测试工具

  • 提供注解来识别测试方法

  • JUnit测试可以让你编写代码更快,并能提高质量JUnit 优雅简洁。没那么复杂,花费时间较少

  • JUnit 在一个条中显示进度。如果运行良好则是绿色,如果运行失败,则变成红色

4.JUnit的使用

  • 将JUnit的jar包导入到工程中(前面有教程,后续就不讲了)

  • 编写测试方法:该测试方法必须是公共的无参数无返回值的非静态方法

  • 在测试方法上使用@Test注解标注该方法是一个测试方法

  • 选中测试方法右键通过junit运行该方法

首先下一个包,我用的是junit-4.13.2

测试一下

报错了,看一下异常信息,少导了一个jar包,去下载一个

问题解决~

5.JUnit常用注解

注解名称说明
@Test表示测试该方法
@Before在测试的方法前运行
@After在测试的方法后运行

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

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

相关文章

Codewave学习体验分享:低代码开发世界的黑马

前言 Codewave平台介绍 CodeWave智能低代码开发平台基于网易自研拥有大规模参数和深度学习能力的智能模型底座产品架构,为企业级应用提供更加智能化研发的软件生产方式,IT人员可以轻易实现从“智能生成”到“可视化拖拽调整”的全栈低代码应用搭建,让复杂应用开发更加高效,加快…

百度百科词条编辑规则是什么?

百度百科词条编辑规则是指在百度百科平台上编辑和创建词条时需要遵循的一系列标准和指南。百度百科作为全球最大的中文百科全书&#xff0c;旨在为用户提供准确、全面、客观的知识信息。为了确保词条内容的质量&#xff0c;百度设定了严格的编辑规则。伯乐网络传媒来给大家分享…

2 搭建模块环境

2.1 架构的问题分析 当前要开发的是媒资管理服务&#xff0c;目前为止共三个微服务&#xff1a;内容管理、系统管理、媒资管理&#xff0c;如下图&#xff1a; 后期还会添加更多的微服务&#xff0c;当前这种由前端直接请求微服务的方式存在弊端&#xff1a; 如果在前端对每…

电脑监控软件都有哪些,哪款好用 | 四款热门软件盘点

在信息化时代&#xff0c;电脑已经成为我们工作和生活中不可或缺的工具。然而&#xff0c;随着电脑使用的普及&#xff0c;也带来了一些安全和隐私方面的问题。 为了保护企业的机密资料和员工的行为规范&#xff0c;越来越多的企业开始使用电脑监控软件来加强管理和监控。 本…

常见问题-d3dx9_39.dll丢失如何解决,快速修复d3dx9_39.dll丢失教程

d3dx9_39.dll 是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它是微软 DirectX 组件的一部分&#xff0c;主要用于支持 3D 图形和声音处理功能。这个文件通常在运行需要 DirectX 支持的游戏或应用程序时被调用。 一、d3dx9_39.dll文件属性 以下是 d3dx9_39.dl…

如何解决Flutter应用程序的兼容性问题

随着移动应用开发领域的不断发展&#xff0c;Flutter作为一种跨平台框架&#xff0c;受到了越来越多开发者的青睐。要确保Flutter应用程序能够在不同的设备和操作系统上稳定运行&#xff0c;并提供一致的用户体验&#xff0c;我们需要重视应用程序的兼容性问题。下面将简单的介…

「阿里云」幻兽帕鲁个人服务器已上线,3分钟快速搭建

基于阿里云搭建幻兽帕鲁服务器方法&#xff0c;1到2分钟部署完成&#xff0c;稳定运行无卡顿&#xff0c;阿里云服务器网aliyunfuwuqi.com分享保姆级手把手教程&#xff0c;基于阿里云计算巢、云服务器或无影云桌面都可以&#xff1a; 基于阿里云幻兽帕鲁服务器创建教程 基于…

在线教育SSR网站项目

Nuxt3 Vue3开发的在线教育SSR 一、首页 二、考试页 三、拼团 四、秒杀 五、直播 六、专栏 七、电子书 八、社区 九、课程 十、用户中心

idea快速解决jar包重复导入或冲突

1、下载 Maven Helper 插件 File -> settings -> plugins 2、启动项目&#xff0c;报jar重复导入或者冲突 3、找到需要解决冲突的pom文件&#xff0c;点击Dependency Analyzer

Go 从标准输入读取数据

fmt.Scan系列 fmt.Scan函数定义如下&#xff1a; // Scan scans text read from standard input, storing successive space-separated values into successive arguments. // Newlines count as space. // It returns the number of items successfully scanned. // If tha…

JavaWeb基础01-基本技术体系介绍和相关工具的安装

一、JavaWeb 1.概述 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站JavaWeb&#xff1a;是用Java技术来解决相关web互联网领域的技术栈 2.组成 &#xff08;1&#xff09;网页&#xff1a;展示数据&#xff08;前端技术&…

服务器是什么?(四种服务器类型)

服务器 服务器定义广义: 专门给其他机器提供服务的计算机。狭义:一台高性能的计算机&#xff0c;通过网络提供外部计算机一些业务服务 个人PC内存大概8G&#xff0c;服务器内存128G起步 服务器是什么 服务器指的是 网络中能对其他机器提供某些服务的计算机系统 &#xff0c;相对…

蓝桥杯备战——4.继电器/蜂鸣器

1.分析原理图 最好自己先去查查138以及ULN2003的使用方法&#xff0c;我这里直接讲思路。 由上图我们可以看到如果138输入ABC101,则输出Y50,此时若WR通过跳线帽接地则Y5C1 &#xff0c;于是573(U9)处于输出跟随输入P0状态&#xff0c;此时若P061&#xff0c;则573输出Q71&am…

有关链表的题目

目录 1.环形链表的约瑟夫问题 2.链表的中间节点 3.合并两个有序链表 4.反转链表 5.移除链表元素 1.环形链表的约瑟夫问题 环形链表的约瑟夫问题_牛客题霸_牛客网 (nowcoder.com) 思路&#xff1a;题目给出结构是环形链表&#xff0c;且题目已经定义好了环形链表的结构。 1…

无线充电 发射端(3)

终于可以传输功率了&#xff01;文末会附上这几个章节的全景图&#xff0c;归纳无线充电发射端状态切换。 这部分涉及到的报头 - 1/控制错误数据包&#xff1b;2/整流功率数据包&#xff1b;3/充电状态数据包&#xff1b;4/结束功率传输数据包&#xff1b;5/专有数据包&#…

Oracle触发器简单应用示例(销售与库存)

目录 一、应用描述 1、应用场景&#xff1a; 2、具体场景&#xff1a; 二、表结构介绍 1、表名介绍&#xff1a; 2、表结构&#xff1a; 三、设置触发器 四、运行示例 1、初始库存描述 2、有库存情况 2.1 1001号产品售出1件 2.2 1001号产品库存已减1 3、无库存情况…

Contest3388 - 2024寒假集训-排位赛竞 赛(二)-补题(A-M)

问题 A: 三五倍数(问题 A: 三五倍数 - BUCTOJ) 思路&#xff1a;这题就暴力&#xff0c;注意一下是小于1000&#xff0c;别取到1000就行。 #include<bits/stdc.h> using namespace std; int main() {int sum0;for(int i3;i<1000;i){if(i%30||i%50) sumi;}cout<<…

线性代数基础【6】二次型

第一节、二次型的基本概念及其标准型 一、基本概念 ①二次型 含n个变量x1,x2,…,xn,且每项都是2次的齐次多项式 ②标准二次型 只含有平方项不含交叉项的二次型称为标准二次型 ③二次型的标准化 设f(X)X^TAX 为一个二次型,经过可逆的线性变换XPY(即P为可逆矩阵)把二次型…

android camera系列(Camera1、Camera2、CameraX)的使用以及输出的图像格式

一、Camera 1.1、结合SurfaceView实现预览 1.1.1、布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-au…

网络防御保护-- 防火墙NAT实验

一、实验拓扑 本实验是在防火墙接口配置实验上&#xff0c;增加几台设备。其防火墙接口配置实验的设备配置已略&#xff0c;详细请看防火墙接口配置实验。 二、实验要求 1、生产区在工作时间&#xff08;9&#xff1a;00---18&#xff1a;00&#xff09;内可以访问服务区&…